diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml deleted file mode 100644 index 892cb03..0000000 --- a/.github/workflows/elixir.yml +++ /dev/null @@ -1,53 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -name: Elixir CI - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -permissions: - contents: read - -jobs: - build: - services: - db: - image: postgres:15-alpine - ports: ['5432:5432'] - env: - POSTGRES_PASSWORD: postgres - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - name: Build and test - runs-on: ubuntu-latest - defaults: - run: - working-directory: ./app - - steps: - - uses: actions/checkout@v4 - - name: Set up Elixir - uses: erlef/setup-beam@61e01a43a562a89bfc54c7f9a378ff67b03e4a21 # v1.16.0 - with: - elixir-version: '1.15.2' # [Required] Define the Elixir version - otp-version: '26.0' # [Required] Define the Erlang/OTP version - - name: Restore dependencies cache - uses: actions/cache@v3 - with: - path: deps - key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} - restore-keys: ${{ runner.os }}-mix- - - name: Install dependencies - run: mix deps.get - - name: Run tests - run: mix test diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index abd3209..0000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Playwright Tests -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] -jobs: - test: - timeout-minutes: 60 - runs-on: ubuntu-latest - defaults: - run: - working-directory: ./web - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - name: Install dependencies - - run: npm ci - - name: Install Playwright Browsers - run: npx playwright install --with-deps - - name: Run Playwright tests - run: npx playwright test - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml deleted file mode 100644 index faeac77..0000000 --- a/.github/workflows/test.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: dagger -on: - push: - branches: [main] - -jobs: - build: - name: build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 - with: - go-version: '1.20' - - name: Install Dagger CLI - run: cd /usr/local && { curl -L https://dl.dagger.io/dagger/install.sh | sh; cd -; } - - name: Run Dagger pipeline - env: - DAGGER_CLOUD_TOKEN: ${{ secrets.DAGGER_CLOUD_TOKEN }} - run: dagger run go run ci/main.go diff --git a/.mise.toml b/.mise.toml index 86838e2..59ddb97 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,3 @@ [tools] -elixir = "1.16.1" -erlang = "26" -node = "20" -go = "1.20" +erlang = "27" +elixir = "1.17" diff --git a/app/.credo.exs b/app/.credo.exs deleted file mode 100644 index 767940d..0000000 --- a/app/.credo.exs +++ /dev/null @@ -1,215 +0,0 @@ -# This file contains the configuration for Credo and you are probably reading -# this after creating it with `mix credo.gen.config`. -# -# If you find anything wrong or unclear in this file, please report an -# issue on GitHub: https://github.com/rrrene/credo/issues -# -%{ - # - # You can have as many configs as you like in the `configs:` field. - configs: [ - %{ - # - # Run any config using `mix credo -C `. If no config name is given - # "default" is used. - # - name: "default", - # - # These are the files included in the analysis: - files: %{ - # - # You can give explicit globs or simply directories. - # In the latter case `**/*.{ex,exs}` will be used. - # - included: [ - "lib/", - "src/", - # "test/", - "web/", - "apps/*/lib/", - "apps/*/src/", - "apps/*/test/", - "apps/*/web/" - ], - excluded: [~r"/_build/", ~r"/deps/", ~r"/node_modules/"] - }, - # - # Load and configure plugins here: - # - plugins: [], - # - # If you create your own checks, you must specify the source files for - # them here, so they can be loaded by Credo before running the analysis. - # - requires: [], - # - # If you want to enforce a style guide and need a more traditional linting - # experience, you can change `strict` to `true` below: - # - strict: false, - # - # To modify the timeout for parsing files, change this value: - # - parse_timeout: 5000, - # - # If you want to use uncolored output by default, you can change `color` - # to `false` below: - # - color: true, - # - # You can customize the parameters of any check by adding a second element - # to the tuple. - # - # To disable a check put `false` as second element: - # - # {Credo.Check.Design.DuplicatedCode, false} - # - checks: %{ - enabled: [ - # - ## Consistency Checks - # - {Credo.Check.Consistency.ExceptionNames, []}, - {Credo.Check.Consistency.LineEndings, []}, - {Credo.Check.Consistency.ParameterPatternMatching, []}, - {Credo.Check.Consistency.SpaceAroundOperators, []}, - {Credo.Check.Consistency.SpaceInParentheses, []}, - {Credo.Check.Consistency.TabsOrSpaces, []}, - - # - ## Design Checks - # - # You can customize the priority of any check - # Priority values are: `low, normal, high, higher` - # - {Credo.Check.Design.AliasUsage, [priority: :low, if_nested_deeper_than: 2, if_called_more_often_than: 0]}, - {Credo.Check.Design.TagFIXME, []}, - # You can also customize the exit_status of each check. - # If you don't want TODO comments to cause `mix credo` to fail, just - # set this value to 0 (zero). - # - {Credo.Check.Design.TagTODO, false}, - - # - ## Readability Checks - # - {Credo.Check.Readability.AliasOrder, []}, - {Credo.Check.Readability.FunctionNames, []}, - {Credo.Check.Readability.LargeNumbers, []}, - {Credo.Check.Readability.MaxLineLength, [priority: :low, max_length: 120]}, - {Credo.Check.Readability.ModuleAttributeNames, []}, - {Credo.Check.Readability.ModuleDoc, []}, - {Credo.Check.Readability.ModuleNames, []}, - {Credo.Check.Readability.ParenthesesInCondition, []}, - {Credo.Check.Readability.ParenthesesOnZeroArityDefs, []}, - {Credo.Check.Readability.PipeIntoAnonymousFunctions, []}, - {Credo.Check.Readability.PredicateFunctionNames, []}, - {Credo.Check.Readability.PreferImplicitTry, []}, - {Credo.Check.Readability.RedundantBlankLines, []}, - {Credo.Check.Readability.Semicolons, []}, - {Credo.Check.Readability.SpaceAfterCommas, []}, - {Credo.Check.Readability.StringSigils, []}, - {Credo.Check.Readability.TrailingBlankLine, []}, - {Credo.Check.Readability.TrailingWhiteSpace, []}, - {Credo.Check.Readability.UnnecessaryAliasExpansion, []}, - {Credo.Check.Readability.VariableNames, []}, - {Credo.Check.Readability.WithSingleClause, []}, - - # - ## Refactoring Opportunities - # - {Credo.Check.Refactor.Apply, []}, - {Credo.Check.Refactor.CondStatements, []}, - {Credo.Check.Refactor.CyclomaticComplexity, []}, - {Credo.Check.Refactor.FilterCount, []}, - {Credo.Check.Refactor.FilterFilter, []}, - {Credo.Check.Refactor.FunctionArity, []}, - {Credo.Check.Refactor.LongQuoteBlocks, []}, - {Credo.Check.Refactor.MapJoin, []}, - {Credo.Check.Refactor.MatchInCondition, []}, - {Credo.Check.Refactor.NegatedConditionsInUnless, []}, - {Credo.Check.Refactor.NegatedConditionsWithElse, []}, - {Credo.Check.Refactor.Nesting, []}, - {Credo.Check.Refactor.RedundantWithClauseResult, []}, - {Credo.Check.Refactor.RejectReject, []}, - {Credo.Check.Refactor.UnlessWithElse, []}, - {Credo.Check.Refactor.WithClauses, []}, - - # - ## Warnings - # - {Credo.Check.Warning.ApplicationConfigInModuleAttribute, []}, - {Credo.Check.Warning.BoolOperationOnSameValues, []}, - {Credo.Check.Warning.Dbg, []}, - {Credo.Check.Warning.ExpensiveEmptyEnumCheck, []}, - {Credo.Check.Warning.IExPry, []}, - {Credo.Check.Warning.IoInspect, []}, - {Credo.Check.Warning.MissedMetadataKeyInLoggerConfig, []}, - {Credo.Check.Warning.OperationOnSameValues, []}, - {Credo.Check.Warning.OperationWithConstantResult, []}, - {Credo.Check.Warning.RaiseInsideRescue, []}, - {Credo.Check.Warning.SpecWithStruct, []}, - {Credo.Check.Warning.UnsafeExec, []}, - {Credo.Check.Warning.UnusedEnumOperation, []}, - {Credo.Check.Warning.UnusedFileOperation, []}, - {Credo.Check.Warning.UnusedKeywordOperation, []}, - {Credo.Check.Warning.UnusedListOperation, []}, - {Credo.Check.Warning.UnusedPathOperation, []}, - {Credo.Check.Warning.UnusedRegexOperation, []}, - {Credo.Check.Warning.UnusedStringOperation, []}, - {Credo.Check.Warning.UnusedTupleOperation, []}, - {Credo.Check.Warning.WrongTestFileExtension, []} - ], - disabled: [ - # - # Checks scheduled for next check update (opt-in for now, just replace `false` with `[]`) - - # - # Controversial and experimental checks (opt-in, just move the check to `:enabled` - # and be sure to use `mix credo --strict` to see low priority checks) - # - {Credo.Check.Consistency.MultiAliasImportRequireUse, []}, - {Credo.Check.Consistency.UnusedVariableNames, []}, - {Credo.Check.Design.DuplicatedCode, []}, - {Credo.Check.Design.SkipTestWithoutComment, []}, - {Credo.Check.Readability.AliasAs, []}, - {Credo.Check.Readability.BlockPipe, []}, - {Credo.Check.Readability.ImplTrue, []}, - {Credo.Check.Readability.MultiAlias, []}, - {Credo.Check.Readability.NestedFunctionCalls, []}, - {Credo.Check.Readability.OneArityFunctionInPipe, []}, - {Credo.Check.Readability.OnePipePerLine, []}, - {Credo.Check.Readability.SeparateAliasRequire, []}, - {Credo.Check.Readability.SingleFunctionToBlockPipe, []}, - {Credo.Check.Readability.SinglePipe, []}, - {Credo.Check.Readability.Specs, []}, - {Credo.Check.Readability.StrictModuleLayout, []}, - {Credo.Check.Readability.WithCustomTaggedTuple, []}, - {Credo.Check.Refactor.ABCSize, []}, - {Credo.Check.Refactor.AppendSingleItem, []}, - {Credo.Check.Refactor.DoubleBooleanNegation, []}, - {Credo.Check.Refactor.FilterReject, []}, - {Credo.Check.Refactor.IoPuts, []}, - {Credo.Check.Refactor.MapMap, []}, - {Credo.Check.Refactor.ModuleDependencies, []}, - {Credo.Check.Refactor.NegatedIsNil, []}, - {Credo.Check.Refactor.PassAsyncInTestCases, []}, - {Credo.Check.Refactor.PipeChainStart, []}, - {Credo.Check.Refactor.RejectFilter, []}, - {Credo.Check.Refactor.VariableRebinding, []}, - {Credo.Check.Warning.LazyLogging, []}, - {Credo.Check.Warning.LeakyEnvironment, []}, - {Credo.Check.Warning.MapGetUnsafePass, []}, - {Credo.Check.Warning.MixEnv, []}, - {Credo.Check.Warning.UnsafeToAtom, []} - - # {Credo.Check.Refactor.MapInto, []}, - - # - # Custom checks can be created using `mix credo.gen.check`. - # - ] - } - } - ] -} diff --git a/app/.formatter.exs b/app/.formatter.exs index 02d97de..ef8840c 100644 --- a/app/.formatter.exs +++ b/app/.formatter.exs @@ -1,6 +1,6 @@ [ import_deps: [:ecto, :ecto_sql, :phoenix], subdirectories: ["priv/*/migrations"], - inputs: ["*.{ex,exs}", "{config,lib,test}/**/*.{ex,exs}", "priv/*/seeds.exs"], - plugins: [Styler] + plugins: [Phoenix.LiveView.HTMLFormatter], + inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"] ] diff --git a/app/.gitignore b/app/.gitignore index cb28c68..397efda 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -35,5 +35,3 @@ bubbli-*.tar npm-debug.log /assets/node_modules/ -/priv/plts/*.plt -/priv/plts/*.plt.hash diff --git a/app/assets/js/app.js b/app/assets/js/app.js index 20afa9c..d5e278a 100644 --- a/app/assets/js/app.js +++ b/app/assets/js/app.js @@ -15,3 +15,30 @@ // import "some-package" // +// Include phoenix_html to handle method=PUT/DELETE in forms and buttons. +import "phoenix_html" +// Establish Phoenix Socket and LiveView configuration. +import {Socket} from "phoenix" +import {LiveSocket} from "phoenix_live_view" +import topbar from "../vendor/topbar" + +let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content") +let liveSocket = new LiveSocket("/live", Socket, { + longPollFallbackMs: 2500, + params: {_csrf_token: csrfToken} +}) + +// Show progress bar on live navigation and form submits +topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"}) +window.addEventListener("phx:page-loading-start", _info => topbar.show(300)) +window.addEventListener("phx:page-loading-stop", _info => topbar.hide()) + +// connect if there are any LiveViews on the page +liveSocket.connect() + +// expose liveSocket on window for web console debug logs and latency simulation: +// >> liveSocket.enableDebug() +// >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session +// >> liveSocket.disableLatencySim() +window.liveSocket = liveSocket + diff --git a/app/assets/tailwind.config.js b/app/assets/tailwind.config.js index 1174033..5236fef 100644 --- a/app/assets/tailwind.config.js +++ b/app/assets/tailwind.config.js @@ -8,8 +8,8 @@ const path = require("path") module.exports = { content: [ "./js/**/*.js", - "../lib/*_web.ex", - "../lib/*_web/**/*.*ex" + "../lib/bubbli_web.ex", + "../lib/bubbli_web/**/*.*ex" ], theme: { extend: { @@ -25,24 +25,24 @@ module.exports = { // //
// - plugin(({addVariant}) => addVariant("phx-no-feedback", [".phx-no-feedback&", ".phx-no-feedback &"])), plugin(({addVariant}) => addVariant("phx-click-loading", [".phx-click-loading&", ".phx-click-loading &"])), plugin(({addVariant}) => addVariant("phx-submit-loading", [".phx-submit-loading&", ".phx-submit-loading &"])), plugin(({addVariant}) => addVariant("phx-change-loading", [".phx-change-loading&", ".phx-change-loading &"])), - // Embeds Hero Icons (https://heroicons.com) into your app.css bundle + // Embeds Heroicons (https://heroicons.com) into your app.css bundle // See your `CoreComponents.icon/1` for more information. // plugin(function({matchComponents, theme}) { - let iconsDir = path.join(__dirname, "./vendor/heroicons/optimized") + let iconsDir = path.join(__dirname, "../deps/heroicons/optimized") let values = {} let icons = [ ["", "/24/outline"], ["-solid", "/24/solid"], - ["-mini", "/20/solid"] + ["-mini", "/20/solid"], + ["-micro", "/16/solid"] ] icons.forEach(([suffix, dir]) => { - fs.readdirSync(path.join(iconsDir, dir)).map(file => { + fs.readdirSync(path.join(iconsDir, dir)).forEach(file => { let name = path.basename(file, ".svg") + suffix values[name] = {name, fullPath: path.join(iconsDir, dir, file)} }) @@ -50,15 +50,22 @@ module.exports = { matchComponents({ "hero": ({name, fullPath}) => { let content = fs.readFileSync(fullPath).toString().replace(/\r?\n|\r/g, "") + let size = theme("spacing.6") + if (name.endsWith("-mini")) { + size = theme("spacing.5") + } else if (name.endsWith("-micro")) { + size = theme("spacing.4") + } return { [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, "-webkit-mask": `var(--hero-${name})`, "mask": `var(--hero-${name})`, + "mask-repeat": "no-repeat", "background-color": "currentColor", "vertical-align": "middle", "display": "inline-block", - "width": theme("spacing.5"), - "height": theme("spacing.5") + "width": size, + "height": size } } }, {values}) diff --git a/app/assets/vendor/heroicons/LICENSE.md b/app/assets/vendor/heroicons/LICENSE.md deleted file mode 100644 index 1ac3e40..0000000 --- a/app/assets/vendor/heroicons/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Refactoring UI Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/app/assets/vendor/heroicons/UPGRADE.md b/app/assets/vendor/heroicons/UPGRADE.md deleted file mode 100644 index d8fdb1c..0000000 --- a/app/assets/vendor/heroicons/UPGRADE.md +++ /dev/null @@ -1,6 +0,0 @@ -You are running heroicons v2.0.16. To upgrade in place, you can run the following command, -where your `HERO_VSN` export is your desired version: - - export HERO_VSN="2.0.16" ; \ - curl -L "https://github.com/tailwindlabs/heroicons/archive/refs/tags/v${HERO_VSN}.tar.gz" | \ - tar -xv --strip-components=1 heroicons-${HERO_VSN}/optimized diff --git a/app/assets/vendor/heroicons/optimized/20/solid/academic-cap.svg b/app/assets/vendor/heroicons/optimized/20/solid/academic-cap.svg deleted file mode 100644 index bb980e6..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/academic-cap.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/adjustments-horizontal.svg b/app/assets/vendor/heroicons/optimized/20/solid/adjustments-horizontal.svg deleted file mode 100644 index 13f9251..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/adjustments-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/adjustments-vertical.svg b/app/assets/vendor/heroicons/optimized/20/solid/adjustments-vertical.svg deleted file mode 100644 index 6f75b6c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/adjustments-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/archive-box-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/archive-box-arrow-down.svg deleted file mode 100644 index 5ccef9d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/archive-box-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/archive-box-x-mark.svg b/app/assets/vendor/heroicons/optimized/20/solid/archive-box-x-mark.svg deleted file mode 100644 index 73acbef..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/archive-box-x-mark.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/archive-box.svg b/app/assets/vendor/heroicons/optimized/20/solid/archive-box.svg deleted file mode 100644 index 2205ae8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/archive-box.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-circle.svg deleted file mode 100644 index bb21a89..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-left.svg deleted file mode 100644 index f0c3624..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square-stack.svg deleted file mode 100644 index d9c4db0..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square.svg deleted file mode 100644 index 4e8ee0f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-right.svg deleted file mode 100644 index 65cdada..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-tray.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-tray.svg deleted file mode 100644 index 5c3589d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down-tray.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-down.svg deleted file mode 100644 index 8d577b1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg deleted file mode 100644 index 8cce243..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-on-rectangle.svg deleted file mode 100644 index 74d0699..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left-on-rectangle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-left.svg deleted file mode 100644 index c7efd30..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-down.svg deleted file mode 100644 index d263061..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-left.svg deleted file mode 100644 index 297553c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-right.svg deleted file mode 100644 index eea945e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-up.svg deleted file mode 100644 index 193ff97..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-long-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-path-rounded-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-path-rounded-square.svg deleted file mode 100644 index 7d3deb5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-path-rounded-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-path.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-path.svg deleted file mode 100644 index 1a31b4c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-circle.svg deleted file mode 100644 index 4178da9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-on-rectangle.svg deleted file mode 100644 index 27c4dff..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right-on-rectangle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-right.svg deleted file mode 100644 index 95cc517..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-down.svg deleted file mode 100644 index b986c6c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-left.svg deleted file mode 100644 index 0cb7e71..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-right.svg deleted file mode 100644 index 16beb5e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-up.svg deleted file mode 100644 index 7fda0e5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-small-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-top-right-on-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-top-right-on-square.svg deleted file mode 100644 index c93df54..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-top-right-on-square.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-down.svg deleted file mode 100644 index 5ec7c03..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-up.svg deleted file mode 100644 index 67af2cc..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-trending-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-circle.svg deleted file mode 100644 index 21d87f2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-left.svg deleted file mode 100644 index fb50038..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square-stack.svg deleted file mode 100644 index 0df0ed2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square.svg deleted file mode 100644 index 01f18a8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-right.svg deleted file mode 100644 index 4841916..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-tray.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-tray.svg deleted file mode 100644 index 832afe5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up-tray.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-up.svg deleted file mode 100644 index 24b12b7..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-down.svg deleted file mode 100644 index 6839676..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-left.svg deleted file mode 100644 index 6691aa4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-right.svg deleted file mode 100644 index 9a6e23b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-up.svg deleted file mode 100644 index 8e65bf8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-in.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-in.svg deleted file mode 100644 index 6275807..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-in.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-out.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-out.svg deleted file mode 100644 index 14e1bcd..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-out.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrows-right-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrows-right-left.svg deleted file mode 100644 index 87616d3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrows-right-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/arrows-up-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/arrows-up-down.svg deleted file mode 100644 index b9c43d9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/arrows-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/at-symbol.svg b/app/assets/vendor/heroicons/optimized/20/solid/at-symbol.svg deleted file mode 100644 index a9e960d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/at-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/backspace.svg b/app/assets/vendor/heroicons/optimized/20/solid/backspace.svg deleted file mode 100644 index d3c1686..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/backspace.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/backward.svg b/app/assets/vendor/heroicons/optimized/20/solid/backward.svg deleted file mode 100644 index 8d341b2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/backward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/banknotes.svg b/app/assets/vendor/heroicons/optimized/20/solid/banknotes.svg deleted file mode 100644 index 979c586..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/banknotes.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-2.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-2.svg deleted file mode 100644 index 4ce1e19..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-left.svg deleted file mode 100644 index ebf785d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-right.svg deleted file mode 100644 index af69c3d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-center-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-3-center-left.svg deleted file mode 100644 index ee8a526..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-3-center-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-3.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-3.svg deleted file mode 100644 index d164cfd..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-3.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-4.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-4.svg deleted file mode 100644 index 8e3f650..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-4.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-down.svg deleted file mode 100644 index fd8f98d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-up.svg deleted file mode 100644 index ba77dbe..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bars-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/battery-0.svg b/app/assets/vendor/heroicons/optimized/20/solid/battery-0.svg deleted file mode 100644 index 2320f7e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/battery-0.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/battery-100.svg b/app/assets/vendor/heroicons/optimized/20/solid/battery-100.svg deleted file mode 100644 index e04408f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/battery-100.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/battery-50.svg b/app/assets/vendor/heroicons/optimized/20/solid/battery-50.svg deleted file mode 100644 index e5e8498..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/battery-50.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/beaker.svg b/app/assets/vendor/heroicons/optimized/20/solid/beaker.svg deleted file mode 100644 index 025c46b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/beaker.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bell-alert.svg b/app/assets/vendor/heroicons/optimized/20/solid/bell-alert.svg deleted file mode 100644 index c84dc7c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bell-alert.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bell-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/bell-slash.svg deleted file mode 100644 index a4296ac..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bell-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bell-snooze.svg b/app/assets/vendor/heroicons/optimized/20/solid/bell-snooze.svg deleted file mode 100644 index ad4f8c5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bell-snooze.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bell.svg b/app/assets/vendor/heroicons/optimized/20/solid/bell.svg deleted file mode 100644 index 2a81bba..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bell.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bolt-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/bolt-slash.svg deleted file mode 100644 index e4c2499..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bolt-slash.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bolt.svg b/app/assets/vendor/heroicons/optimized/20/solid/bolt.svg deleted file mode 100644 index 53f4fb9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bolt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/book-open.svg b/app/assets/vendor/heroicons/optimized/20/solid/book-open.svg deleted file mode 100644 index 99cf0d4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/book-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bookmark-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/bookmark-slash.svg deleted file mode 100644 index 1442fd4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bookmark-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bookmark-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/bookmark-square.svg deleted file mode 100644 index 849c425..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bookmark-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bookmark.svg b/app/assets/vendor/heroicons/optimized/20/solid/bookmark.svg deleted file mode 100644 index a3e68de..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bookmark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/briefcase.svg b/app/assets/vendor/heroicons/optimized/20/solid/briefcase.svg deleted file mode 100644 index 275f4b3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/briefcase.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/bug-ant.svg b/app/assets/vendor/heroicons/optimized/20/solid/bug-ant.svg deleted file mode 100644 index bc86615..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/bug-ant.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/building-library.svg b/app/assets/vendor/heroicons/optimized/20/solid/building-library.svg deleted file mode 100644 index 610bce7..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/building-library.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/building-office-2.svg b/app/assets/vendor/heroicons/optimized/20/solid/building-office-2.svg deleted file mode 100644 index b25c33d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/building-office-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/building-office.svg b/app/assets/vendor/heroicons/optimized/20/solid/building-office.svg deleted file mode 100644 index 8fb3fab..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/building-office.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/building-storefront.svg b/app/assets/vendor/heroicons/optimized/20/solid/building-storefront.svg deleted file mode 100644 index 0d7da7c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/building-storefront.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cake.svg b/app/assets/vendor/heroicons/optimized/20/solid/cake.svg deleted file mode 100644 index c58d3b9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cake.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/calculator.svg b/app/assets/vendor/heroicons/optimized/20/solid/calculator.svg deleted file mode 100644 index cc26160..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/calculator.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/calendar-days.svg b/app/assets/vendor/heroicons/optimized/20/solid/calendar-days.svg deleted file mode 100644 index ded2318..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/calendar-days.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/calendar.svg b/app/assets/vendor/heroicons/optimized/20/solid/calendar.svg deleted file mode 100644 index dea374d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/calendar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/camera.svg b/app/assets/vendor/heroicons/optimized/20/solid/camera.svg deleted file mode 100644 index 17356ae..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/camera.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chart-bar-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/chart-bar-square.svg deleted file mode 100644 index 6d5b976..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chart-bar-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chart-bar.svg b/app/assets/vendor/heroicons/optimized/20/solid/chart-bar.svg deleted file mode 100644 index c496112..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chart-pie.svg b/app/assets/vendor/heroicons/optimized/20/solid/chart-pie.svg deleted file mode 100644 index 37d18c9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chart-pie.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center-text.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center-text.svg deleted file mode 100644 index fee91be..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center.svg deleted file mode 100644 index 24de840..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-ellipsis.svg deleted file mode 100644 index 7e2b06c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-right.svg deleted file mode 100644 index fceca7f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-right.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left.svg deleted file mode 100644 index cd706f9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left-ellipsis.svg deleted file mode 100644 index 88d9c32..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left.svg deleted file mode 100644 index f3b3883..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/check-badge.svg b/app/assets/vendor/heroicons/optimized/20/solid/check-badge.svg deleted file mode 100644 index b13190c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/check-badge.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/check-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/check-circle.svg deleted file mode 100644 index dbbc905..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/check-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/check.svg b/app/assets/vendor/heroicons/optimized/20/solid/check.svg deleted file mode 100644 index d1956aa..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-down.svg deleted file mode 100644 index 3c65193..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-left.svg deleted file mode 100644 index a41e615..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-right.svg deleted file mode 100644 index d78c932..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-right.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-up.svg deleted file mode 100644 index f7ac668..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-double-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-down.svg deleted file mode 100644 index 6b63dfb..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-left.svg deleted file mode 100644 index b484a40..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-right.svg deleted file mode 100644 index 9ce3745..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-up-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-up-down.svg deleted file mode 100644 index 2499bb1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/chevron-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/chevron-up.svg deleted file mode 100644 index 8aaaa1f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/chevron-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/circle-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/circle-stack.svg deleted file mode 100644 index fae2090..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/circle-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-check.svg b/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-check.svg deleted file mode 100644 index 2447012..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-check.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-list.svg b/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-list.svg deleted file mode 100644 index a78b24c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document-list.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document.svg b/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document.svg deleted file mode 100644 index f29a433..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/clipboard-document.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/clipboard.svg b/app/assets/vendor/heroicons/optimized/20/solid/clipboard.svg deleted file mode 100644 index 3b2a7ff..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/clipboard.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/clock.svg b/app/assets/vendor/heroicons/optimized/20/solid/clock.svg deleted file mode 100644 index d72dd62..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-down.svg deleted file mode 100644 index cb32c04..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-up.svg deleted file mode 100644 index 06b2c4a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cloud.svg b/app/assets/vendor/heroicons/optimized/20/solid/cloud.svg deleted file mode 100644 index c5eb0c8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/code-bracket-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/code-bracket-square.svg deleted file mode 100644 index e4e3530..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/code-bracket-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/code-bracket.svg b/app/assets/vendor/heroicons/optimized/20/solid/code-bracket.svg deleted file mode 100644 index 4adfd32..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/code-bracket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cog-6-tooth.svg b/app/assets/vendor/heroicons/optimized/20/solid/cog-6-tooth.svg deleted file mode 100644 index 435032f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cog-6-tooth.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cog-8-tooth.svg b/app/assets/vendor/heroicons/optimized/20/solid/cog-8-tooth.svg deleted file mode 100644 index 0450feb..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cog-8-tooth.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cog.svg b/app/assets/vendor/heroicons/optimized/20/solid/cog.svg deleted file mode 100644 index 10f43b5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cog.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/command-line.svg b/app/assets/vendor/heroicons/optimized/20/solid/command-line.svg deleted file mode 100644 index 59cf34c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/command-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/computer-desktop.svg b/app/assets/vendor/heroicons/optimized/20/solid/computer-desktop.svg deleted file mode 100644 index 4eeac1b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/computer-desktop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cpu-chip.svg b/app/assets/vendor/heroicons/optimized/20/solid/cpu-chip.svg deleted file mode 100644 index f7c49b4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cpu-chip.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/credit-card.svg b/app/assets/vendor/heroicons/optimized/20/solid/credit-card.svg deleted file mode 100644 index d650fea..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/credit-card.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cube-transparent.svg b/app/assets/vendor/heroicons/optimized/20/solid/cube-transparent.svg deleted file mode 100644 index bfe9dae..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cube-transparent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cube.svg b/app/assets/vendor/heroicons/optimized/20/solid/cube.svg deleted file mode 100644 index c3436ed..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cube.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-bangladeshi.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-bangladeshi.svg deleted file mode 100644 index 2a27260..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-bangladeshi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-dollar.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-dollar.svg deleted file mode 100644 index 1b00de7..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-dollar.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-euro.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-euro.svg deleted file mode 100644 index 43fda8e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-euro.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-pound.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-pound.svg deleted file mode 100644 index 9bc57fe..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-pound.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-rupee.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-rupee.svg deleted file mode 100644 index 67da528..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-rupee.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/currency-yen.svg b/app/assets/vendor/heroicons/optimized/20/solid/currency-yen.svg deleted file mode 100644 index 68fca06..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/currency-yen.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-rays.svg b/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-rays.svg deleted file mode 100644 index d2d36a7..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-rays.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-ripple.svg b/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-ripple.svg deleted file mode 100644 index 89ccfda..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-ripple.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/device-phone-mobile.svg b/app/assets/vendor/heroicons/optimized/20/solid/device-phone-mobile.svg deleted file mode 100644 index 68fac4f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/device-phone-mobile.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/device-tablet.svg b/app/assets/vendor/heroicons/optimized/20/solid/device-tablet.svg deleted file mode 100644 index 2490e1f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/device-tablet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-down.svg deleted file mode 100644 index a51461d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-up.svg deleted file mode 100644 index d55aacd..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-chart-bar.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-chart-bar.svg deleted file mode 100644 index 8d5f60a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-check.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-check.svg deleted file mode 100644 index b28da14..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-duplicate.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-duplicate.svg deleted file mode 100644 index 64768cf..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-duplicate.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-magnifying-glass.svg deleted file mode 100644 index 0dc8eba..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-magnifying-glass.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-minus.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-minus.svg deleted file mode 100644 index bf7af06..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-plus.svg deleted file mode 100644 index 133cc82..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document-text.svg b/app/assets/vendor/heroicons/optimized/20/solid/document-text.svg deleted file mode 100644 index f7d91ba..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/document.svg b/app/assets/vendor/heroicons/optimized/20/solid/document.svg deleted file mode 100644 index aa7070c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/document.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal-circle.svg deleted file mode 100644 index 799cf88..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal.svg b/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal.svg deleted file mode 100644 index a82211c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-vertical.svg b/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-vertical.svg deleted file mode 100644 index ac9c83f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/ellipsis-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/envelope-open.svg b/app/assets/vendor/heroicons/optimized/20/solid/envelope-open.svg deleted file mode 100644 index a60035b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/envelope-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/envelope.svg b/app/assets/vendor/heroicons/optimized/20/solid/envelope.svg deleted file mode 100644 index b582b8f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/envelope.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/exclamation-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/exclamation-circle.svg deleted file mode 100644 index 3cf5b59..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/exclamation-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/exclamation-triangle.svg b/app/assets/vendor/heroicons/optimized/20/solid/exclamation-triangle.svg deleted file mode 100644 index a6cc02f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/exclamation-triangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/eye-dropper.svg b/app/assets/vendor/heroicons/optimized/20/solid/eye-dropper.svg deleted file mode 100644 index cce0833..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/eye-dropper.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/eye-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/eye-slash.svg deleted file mode 100644 index cc2e222..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/eye-slash.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/eye.svg b/app/assets/vendor/heroicons/optimized/20/solid/eye.svg deleted file mode 100644 index b17cec9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/eye.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/face-frown.svg b/app/assets/vendor/heroicons/optimized/20/solid/face-frown.svg deleted file mode 100644 index 8cbb3b3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/face-frown.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/face-smile.svg b/app/assets/vendor/heroicons/optimized/20/solid/face-smile.svg deleted file mode 100644 index 434c83e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/face-smile.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/film.svg b/app/assets/vendor/heroicons/optimized/20/solid/film.svg deleted file mode 100644 index 9573445..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/film.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/finger-print.svg b/app/assets/vendor/heroicons/optimized/20/solid/finger-print.svg deleted file mode 100644 index 409d67e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/finger-print.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/fire.svg b/app/assets/vendor/heroicons/optimized/20/solid/fire.svg deleted file mode 100644 index 88fb85e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/fire.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/flag.svg b/app/assets/vendor/heroicons/optimized/20/solid/flag.svg deleted file mode 100644 index b790f05..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/flag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/folder-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/folder-arrow-down.svg deleted file mode 100644 index 4c2a915..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/folder-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/folder-minus.svg b/app/assets/vendor/heroicons/optimized/20/solid/folder-minus.svg deleted file mode 100644 index 248388b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/folder-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/folder-open.svg b/app/assets/vendor/heroicons/optimized/20/solid/folder-open.svg deleted file mode 100644 index 79d245e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/folder-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/folder-plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/folder-plus.svg deleted file mode 100644 index 0780a54..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/folder-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/folder.svg b/app/assets/vendor/heroicons/optimized/20/solid/folder.svg deleted file mode 100644 index c92e0ff..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/folder.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/forward.svg b/app/assets/vendor/heroicons/optimized/20/solid/forward.svg deleted file mode 100644 index 11fd161..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/forward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/funnel.svg b/app/assets/vendor/heroicons/optimized/20/solid/funnel.svg deleted file mode 100644 index af3078f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/funnel.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/gif.svg b/app/assets/vendor/heroicons/optimized/20/solid/gif.svg deleted file mode 100644 index ff1cd38..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/gif.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/gift-top.svg b/app/assets/vendor/heroicons/optimized/20/solid/gift-top.svg deleted file mode 100644 index d650d04..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/gift-top.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/gift.svg b/app/assets/vendor/heroicons/optimized/20/solid/gift.svg deleted file mode 100644 index 90362ab..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/gift.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/globe-alt.svg b/app/assets/vendor/heroicons/optimized/20/solid/globe-alt.svg deleted file mode 100644 index c8ff599..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/globe-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/globe-americas.svg b/app/assets/vendor/heroicons/optimized/20/solid/globe-americas.svg deleted file mode 100644 index 7de8723..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/globe-americas.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/globe-asia-australia.svg b/app/assets/vendor/heroicons/optimized/20/solid/globe-asia-australia.svg deleted file mode 100644 index b3da4dd..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/globe-asia-australia.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/globe-europe-africa.svg b/app/assets/vendor/heroicons/optimized/20/solid/globe-europe-africa.svg deleted file mode 100644 index 92db1e1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/globe-europe-africa.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/hand-raised.svg b/app/assets/vendor/heroicons/optimized/20/solid/hand-raised.svg deleted file mode 100644 index caa27db..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/hand-raised.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-down.svg deleted file mode 100644 index 06ffbe0..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-up.svg b/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-up.svg deleted file mode 100644 index 3d67d98..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/hand-thumb-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/hashtag.svg b/app/assets/vendor/heroicons/optimized/20/solid/hashtag.svg deleted file mode 100644 index 29c9f10..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/hashtag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/heart.svg b/app/assets/vendor/heroicons/optimized/20/solid/heart.svg deleted file mode 100644 index 96e63d9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/heart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/home-modern.svg b/app/assets/vendor/heroicons/optimized/20/solid/home-modern.svg deleted file mode 100644 index 95033a3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/home-modern.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/home.svg b/app/assets/vendor/heroicons/optimized/20/solid/home.svg deleted file mode 100644 index ae2acdc..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/home.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/identification.svg b/app/assets/vendor/heroicons/optimized/20/solid/identification.svg deleted file mode 100644 index 7a8338c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/identification.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/inbox-arrow-down.svg b/app/assets/vendor/heroicons/optimized/20/solid/inbox-arrow-down.svg deleted file mode 100644 index 37f464e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/inbox-arrow-down.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/inbox-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/inbox-stack.svg deleted file mode 100644 index b8f22d1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/inbox-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/inbox.svg b/app/assets/vendor/heroicons/optimized/20/solid/inbox.svg deleted file mode 100644 index 87ae30d..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/inbox.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/information-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/information-circle.svg deleted file mode 100644 index 25ac644..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/information-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/key.svg b/app/assets/vendor/heroicons/optimized/20/solid/key.svg deleted file mode 100644 index 97e8ad8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/key.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/language.svg b/app/assets/vendor/heroicons/optimized/20/solid/language.svg deleted file mode 100644 index e7524be..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/language.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/lifebuoy.svg b/app/assets/vendor/heroicons/optimized/20/solid/lifebuoy.svg deleted file mode 100644 index 79134c1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/lifebuoy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/light-bulb.svg b/app/assets/vendor/heroicons/optimized/20/solid/light-bulb.svg deleted file mode 100644 index 415e374..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/light-bulb.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/link.svg b/app/assets/vendor/heroicons/optimized/20/solid/link.svg deleted file mode 100644 index e820413..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/link.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/list-bullet.svg b/app/assets/vendor/heroicons/optimized/20/solid/list-bullet.svg deleted file mode 100644 index 3637934..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/list-bullet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/lock-closed.svg b/app/assets/vendor/heroicons/optimized/20/solid/lock-closed.svg deleted file mode 100644 index e7e1dc1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/lock-closed.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/lock-open.svg b/app/assets/vendor/heroicons/optimized/20/solid/lock-open.svg deleted file mode 100644 index 2ac4b14..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/lock-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-circle.svg deleted file mode 100644 index e025769..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-circle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-minus.svg b/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-minus.svg deleted file mode 100644 index a8fb7a2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-minus.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-plus.svg deleted file mode 100644 index e55fc4c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-plus.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass.svg deleted file mode 100644 index d90520a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/magnifying-glass.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/map-pin.svg b/app/assets/vendor/heroicons/optimized/20/solid/map-pin.svg deleted file mode 100644 index 7adc8a9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/map-pin.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/map.svg b/app/assets/vendor/heroicons/optimized/20/solid/map.svg deleted file mode 100644 index 7e25c7b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/map.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/megaphone.svg b/app/assets/vendor/heroicons/optimized/20/solid/megaphone.svg deleted file mode 100644 index cf73785..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/megaphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/microphone.svg b/app/assets/vendor/heroicons/optimized/20/solid/microphone.svg deleted file mode 100644 index 635ded0..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/microphone.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/minus-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/minus-circle.svg deleted file mode 100644 index 5c361e2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/minus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/minus-small.svg b/app/assets/vendor/heroicons/optimized/20/solid/minus-small.svg deleted file mode 100644 index 4e041d3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/minus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/minus.svg b/app/assets/vendor/heroicons/optimized/20/solid/minus.svg deleted file mode 100644 index 6d8dd24..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/moon.svg b/app/assets/vendor/heroicons/optimized/20/solid/moon.svg deleted file mode 100644 index b592110..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/moon.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/musical-note.svg b/app/assets/vendor/heroicons/optimized/20/solid/musical-note.svg deleted file mode 100644 index c7f0aa8..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/musical-note.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/newspaper.svg b/app/assets/vendor/heroicons/optimized/20/solid/newspaper.svg deleted file mode 100644 index be785e3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/newspaper.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/no-symbol.svg b/app/assets/vendor/heroicons/optimized/20/solid/no-symbol.svg deleted file mode 100644 index 8463da2..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/no-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/paint-brush.svg b/app/assets/vendor/heroicons/optimized/20/solid/paint-brush.svg deleted file mode 100644 index c2db8c0..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/paint-brush.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/paper-airplane.svg b/app/assets/vendor/heroicons/optimized/20/solid/paper-airplane.svg deleted file mode 100644 index 35315ad..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/paper-airplane.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/paper-clip.svg b/app/assets/vendor/heroicons/optimized/20/solid/paper-clip.svg deleted file mode 100644 index b38155e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/paper-clip.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/pause-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/pause-circle.svg deleted file mode 100644 index 732530a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/pause-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/pause.svg b/app/assets/vendor/heroicons/optimized/20/solid/pause.svg deleted file mode 100644 index b6544ba..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/pencil-square.svg b/app/assets/vendor/heroicons/optimized/20/solid/pencil-square.svg deleted file mode 100644 index 129ee44..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/pencil-square.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/pencil.svg b/app/assets/vendor/heroicons/optimized/20/solid/pencil.svg deleted file mode 100644 index fa50498..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/pencil.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-down-left.svg deleted file mode 100644 index feeb636..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-down-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-up-right.svg deleted file mode 100644 index e1d9331..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/phone-arrow-up-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/phone-x-mark.svg b/app/assets/vendor/heroicons/optimized/20/solid/phone-x-mark.svg deleted file mode 100644 index 6f1fd36..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/phone-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/phone.svg b/app/assets/vendor/heroicons/optimized/20/solid/phone.svg deleted file mode 100644 index 5fd57fc..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/phone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/photo.svg b/app/assets/vendor/heroicons/optimized/20/solid/photo.svg deleted file mode 100644 index db063d3..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/photo.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/play-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/play-circle.svg deleted file mode 100644 index d1587b7..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/play-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/play-pause.svg b/app/assets/vendor/heroicons/optimized/20/solid/play-pause.svg deleted file mode 100644 index cdfa63b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/play-pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/play.svg b/app/assets/vendor/heroicons/optimized/20/solid/play.svg deleted file mode 100644 index 2cd53e1..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/play.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/plus-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/plus-circle.svg deleted file mode 100644 index 3925a14..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/plus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/plus-small.svg b/app/assets/vendor/heroicons/optimized/20/solid/plus-small.svg deleted file mode 100644 index eb22598..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/plus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/plus.svg deleted file mode 100644 index 218ab93..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/power.svg b/app/assets/vendor/heroicons/optimized/20/solid/power.svg deleted file mode 100644 index 1603820..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/power.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-bar.svg b/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-bar.svg deleted file mode 100644 index e1a4242..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-line.svg b/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-line.svg deleted file mode 100644 index 2e9281f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/presentation-chart-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/printer.svg b/app/assets/vendor/heroicons/optimized/20/solid/printer.svg deleted file mode 100644 index 81d93dc..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/printer.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/puzzle-piece.svg b/app/assets/vendor/heroicons/optimized/20/solid/puzzle-piece.svg deleted file mode 100644 index e5329e5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/puzzle-piece.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/qr-code.svg b/app/assets/vendor/heroicons/optimized/20/solid/qr-code.svg deleted file mode 100644 index d5daf2a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/qr-code.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/question-mark-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/question-mark-circle.svg deleted file mode 100644 index 893dab5..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/question-mark-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/queue-list.svg b/app/assets/vendor/heroicons/optimized/20/solid/queue-list.svg deleted file mode 100644 index 91f5b57..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/queue-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/radio.svg b/app/assets/vendor/heroicons/optimized/20/solid/radio.svg deleted file mode 100644 index 9a12c8b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/radio.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/receipt-percent.svg b/app/assets/vendor/heroicons/optimized/20/solid/receipt-percent.svg deleted file mode 100644 index 1a8f254..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/receipt-percent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/receipt-refund.svg b/app/assets/vendor/heroicons/optimized/20/solid/receipt-refund.svg deleted file mode 100644 index a134c56..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/receipt-refund.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/rectangle-group.svg b/app/assets/vendor/heroicons/optimized/20/solid/rectangle-group.svg deleted file mode 100644 index 599d5f4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/rectangle-group.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/rectangle-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/rectangle-stack.svg deleted file mode 100644 index 94b5654..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/rectangle-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/rocket-launch.svg b/app/assets/vendor/heroicons/optimized/20/solid/rocket-launch.svg deleted file mode 100644 index b97e89e..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/rocket-launch.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/rss.svg b/app/assets/vendor/heroicons/optimized/20/solid/rss.svg deleted file mode 100644 index 538ae9a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/rss.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/scale.svg b/app/assets/vendor/heroicons/optimized/20/solid/scale.svg deleted file mode 100644 index 60b0ed9..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/scale.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/scissors.svg b/app/assets/vendor/heroicons/optimized/20/solid/scissors.svg deleted file mode 100644 index 3122658..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/scissors.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/server-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/server-stack.svg deleted file mode 100644 index 2247dbe..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/server-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/server.svg b/app/assets/vendor/heroicons/optimized/20/solid/server.svg deleted file mode 100644 index 6c8899b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/server.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/share.svg b/app/assets/vendor/heroicons/optimized/20/solid/share.svg deleted file mode 100644 index e5aafee..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/share.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/shield-check.svg b/app/assets/vendor/heroicons/optimized/20/solid/shield-check.svg deleted file mode 100644 index a8572d4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/shield-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/shield-exclamation.svg b/app/assets/vendor/heroicons/optimized/20/solid/shield-exclamation.svg deleted file mode 100644 index 8562de4..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/shield-exclamation.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/shopping-bag.svg b/app/assets/vendor/heroicons/optimized/20/solid/shopping-bag.svg deleted file mode 100644 index e70c815..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/shopping-bag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/shopping-cart.svg b/app/assets/vendor/heroicons/optimized/20/solid/shopping-cart.svg deleted file mode 100644 index 855a631..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/shopping-cart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/signal-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/signal-slash.svg deleted file mode 100644 index 822179a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/signal-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/signal.svg b/app/assets/vendor/heroicons/optimized/20/solid/signal.svg deleted file mode 100644 index 7539204..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/signal.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/sparkles.svg b/app/assets/vendor/heroicons/optimized/20/solid/sparkles.svg deleted file mode 100644 index a247c94..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/sparkles.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/speaker-wave.svg b/app/assets/vendor/heroicons/optimized/20/solid/speaker-wave.svg deleted file mode 100644 index 2e6b3e0..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/speaker-wave.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/speaker-x-mark.svg b/app/assets/vendor/heroicons/optimized/20/solid/speaker-x-mark.svg deleted file mode 100644 index 0c39f61..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/speaker-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/square-2-stack.svg b/app/assets/vendor/heroicons/optimized/20/solid/square-2-stack.svg deleted file mode 100644 index 177d43a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/square-2-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/square-3-stack-3d.svg b/app/assets/vendor/heroicons/optimized/20/solid/square-3-stack-3d.svg deleted file mode 100644 index 7d6b44f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/square-3-stack-3d.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/squares-2x2.svg b/app/assets/vendor/heroicons/optimized/20/solid/squares-2x2.svg deleted file mode 100644 index 47c1817..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/squares-2x2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/squares-plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/squares-plus.svg deleted file mode 100644 index 019eb37..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/squares-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/star.svg b/app/assets/vendor/heroicons/optimized/20/solid/star.svg deleted file mode 100644 index a870365..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/star.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/stop-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/stop-circle.svg deleted file mode 100644 index 9167a64..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/stop-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/stop.svg b/app/assets/vendor/heroicons/optimized/20/solid/stop.svg deleted file mode 100644 index b0e40db..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/stop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/sun.svg b/app/assets/vendor/heroicons/optimized/20/solid/sun.svg deleted file mode 100644 index 449e36c..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/sun.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/swatch.svg b/app/assets/vendor/heroicons/optimized/20/solid/swatch.svg deleted file mode 100644 index 1089548..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/swatch.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/table-cells.svg b/app/assets/vendor/heroicons/optimized/20/solid/table-cells.svg deleted file mode 100644 index aa8eacd..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/table-cells.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/tag.svg b/app/assets/vendor/heroicons/optimized/20/solid/tag.svg deleted file mode 100644 index d6c9c8b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/tag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/ticket.svg b/app/assets/vendor/heroicons/optimized/20/solid/ticket.svg deleted file mode 100644 index 7d04b01..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/ticket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/trash.svg b/app/assets/vendor/heroicons/optimized/20/solid/trash.svg deleted file mode 100644 index 16bd5c6..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/trash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/trophy.svg b/app/assets/vendor/heroicons/optimized/20/solid/trophy.svg deleted file mode 100644 index e2ebdaf..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/trophy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/truck.svg b/app/assets/vendor/heroicons/optimized/20/solid/truck.svg deleted file mode 100644 index a50085a..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/truck.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/tv.svg b/app/assets/vendor/heroicons/optimized/20/solid/tv.svg deleted file mode 100644 index b0c7209..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/tv.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/user-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/user-circle.svg deleted file mode 100644 index abd6c98..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/user-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/user-group.svg b/app/assets/vendor/heroicons/optimized/20/solid/user-group.svg deleted file mode 100644 index dc83736..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/user-group.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/user-minus.svg b/app/assets/vendor/heroicons/optimized/20/solid/user-minus.svg deleted file mode 100644 index b092b77..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/user-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/user-plus.svg b/app/assets/vendor/heroicons/optimized/20/solid/user-plus.svg deleted file mode 100644 index afd5965..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/user-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/user.svg b/app/assets/vendor/heroicons/optimized/20/solid/user.svg deleted file mode 100644 index 4d9b2ee..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/user.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/users.svg b/app/assets/vendor/heroicons/optimized/20/solid/users.svg deleted file mode 100644 index 43526a6..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/users.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/variable.svg b/app/assets/vendor/heroicons/optimized/20/solid/variable.svg deleted file mode 100644 index 3460817..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/variable.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/video-camera-slash.svg b/app/assets/vendor/heroicons/optimized/20/solid/video-camera-slash.svg deleted file mode 100644 index 95b9413..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/video-camera-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/video-camera.svg b/app/assets/vendor/heroicons/optimized/20/solid/video-camera.svg deleted file mode 100644 index 4d22f16..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/video-camera.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/view-columns.svg b/app/assets/vendor/heroicons/optimized/20/solid/view-columns.svg deleted file mode 100644 index 1111492..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/view-columns.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/viewfinder-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/viewfinder-circle.svg deleted file mode 100644 index 5cfe9fb..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/viewfinder-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/wallet.svg b/app/assets/vendor/heroicons/optimized/20/solid/wallet.svg deleted file mode 100644 index 6ce8050..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/wallet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/wifi.svg b/app/assets/vendor/heroicons/optimized/20/solid/wifi.svg deleted file mode 100644 index f3c7118..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/wifi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/window.svg b/app/assets/vendor/heroicons/optimized/20/solid/window.svg deleted file mode 100644 index 9110a2b..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/window.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/wrench-screwdriver.svg b/app/assets/vendor/heroicons/optimized/20/solid/wrench-screwdriver.svg deleted file mode 100644 index 2ad879f..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/wrench-screwdriver.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/wrench.svg b/app/assets/vendor/heroicons/optimized/20/solid/wrench.svg deleted file mode 100644 index 2643e00..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/wrench.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/x-circle.svg b/app/assets/vendor/heroicons/optimized/20/solid/x-circle.svg deleted file mode 100644 index a660014..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/x-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/20/solid/x-mark.svg b/app/assets/vendor/heroicons/optimized/20/solid/x-mark.svg deleted file mode 100644 index 0635bac..0000000 --- a/app/assets/vendor/heroicons/optimized/20/solid/x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/academic-cap.svg b/app/assets/vendor/heroicons/optimized/24/outline/academic-cap.svg deleted file mode 100644 index fc18107..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/academic-cap.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/adjustments-horizontal.svg b/app/assets/vendor/heroicons/optimized/24/outline/adjustments-horizontal.svg deleted file mode 100644 index e859e5d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/adjustments-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/adjustments-vertical.svg b/app/assets/vendor/heroicons/optimized/24/outline/adjustments-vertical.svg deleted file mode 100644 index 6153809..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/adjustments-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/archive-box-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/archive-box-arrow-down.svg deleted file mode 100644 index 1a0a830..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/archive-box-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/archive-box-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/outline/archive-box-x-mark.svg deleted file mode 100644 index 49bd087..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/archive-box-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/archive-box.svg b/app/assets/vendor/heroicons/optimized/24/outline/archive-box.svg deleted file mode 100644 index 704f353..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/archive-box.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-circle.svg deleted file mode 100644 index 248b0e8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-left.svg deleted file mode 100644 index 262b5ff..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square-stack.svg deleted file mode 100644 index 42a5b84..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square.svg deleted file mode 100644 index da1b827..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-right.svg deleted file mode 100644 index 9cc7a30..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-tray.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-tray.svg deleted file mode 100644 index a77546c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down-tray.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-down.svg deleted file mode 100644 index b5b04fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-circle.svg deleted file mode 100644 index 849cc5f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-on-rectangle.svg deleted file mode 100644 index 0d6a3cc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left-on-rectangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-left.svg deleted file mode 100644 index 49f15d4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-down.svg deleted file mode 100644 index eb7a92b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-left.svg deleted file mode 100644 index d3e9005..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-right.svg deleted file mode 100644 index 413d6b5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-up.svg deleted file mode 100644 index fb029f4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-long-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-path-rounded-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-path-rounded-square.svg deleted file mode 100644 index 0cfe39e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-path-rounded-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-path.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-path.svg deleted file mode 100644 index 7da4fd2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-circle.svg deleted file mode 100644 index e7bcb80..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-on-rectangle.svg deleted file mode 100644 index 2b49bec..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right-on-rectangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-right.svg deleted file mode 100644 index 8527a52..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-down.svg deleted file mode 100644 index 1f1a210..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-left.svg deleted file mode 100644 index 778cb17..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-right.svg deleted file mode 100644 index 1b5fc64..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-up.svg deleted file mode 100644 index 4ed197e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-small-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-top-right-on-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-top-right-on-square.svg deleted file mode 100644 index c4a9239..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-top-right-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-down.svg deleted file mode 100644 index aebbb18..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-up.svg deleted file mode 100644 index 868f3d3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-trending-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-circle.svg deleted file mode 100644 index 51340d6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-left.svg deleted file mode 100644 index ba4e54e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square-stack.svg deleted file mode 100644 index 0d4d823..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square.svg deleted file mode 100644 index 2c38ea0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-right.svg deleted file mode 100644 index 0b7a372..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-tray.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-tray.svg deleted file mode 100644 index 448b853..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up-tray.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-up.svg deleted file mode 100644 index e269624..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-down.svg deleted file mode 100644 index 51f9929..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-left.svg deleted file mode 100644 index b8f240e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-right.svg deleted file mode 100644 index ece5091..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-up.svg deleted file mode 100644 index b76c54b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-in.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-in.svg deleted file mode 100644 index 0a8872d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-in.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-out.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-out.svg deleted file mode 100644 index 936ac45..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-out.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrows-right-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrows-right-left.svg deleted file mode 100644 index 18890f3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrows-right-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/arrows-up-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/arrows-up-down.svg deleted file mode 100644 index da4cdf3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/arrows-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/at-symbol.svg b/app/assets/vendor/heroicons/optimized/24/outline/at-symbol.svg deleted file mode 100644 index fe2f644..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/at-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/backspace.svg b/app/assets/vendor/heroicons/optimized/24/outline/backspace.svg deleted file mode 100644 index f76c5df..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/backspace.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/backward.svg b/app/assets/vendor/heroicons/optimized/24/outline/backward.svg deleted file mode 100644 index fb1da49..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/backward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/banknotes.svg b/app/assets/vendor/heroicons/optimized/24/outline/banknotes.svg deleted file mode 100644 index 0603b0d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/banknotes.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-2.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-2.svg deleted file mode 100644 index 9c49ca2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-left.svg deleted file mode 100644 index e23bbc3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-right.svg deleted file mode 100644 index a0f683d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-center-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-3-center-left.svg deleted file mode 100644 index a8e83e1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-3-center-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-3.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-3.svg deleted file mode 100644 index a7cf320..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-3.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-4.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-4.svg deleted file mode 100644 index f34bddf..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-4.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-down.svg deleted file mode 100644 index 200fd3a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-up.svg deleted file mode 100644 index d88bf4e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bars-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/battery-0.svg b/app/assets/vendor/heroicons/optimized/24/outline/battery-0.svg deleted file mode 100644 index fd2aa9d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/battery-0.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/battery-100.svg b/app/assets/vendor/heroicons/optimized/24/outline/battery-100.svg deleted file mode 100644 index ba012c6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/battery-100.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/battery-50.svg b/app/assets/vendor/heroicons/optimized/24/outline/battery-50.svg deleted file mode 100644 index f6f9838..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/battery-50.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/beaker.svg b/app/assets/vendor/heroicons/optimized/24/outline/beaker.svg deleted file mode 100644 index 2d143fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/beaker.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bell-alert.svg b/app/assets/vendor/heroicons/optimized/24/outline/bell-alert.svg deleted file mode 100644 index c4af427..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bell-alert.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bell-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/bell-slash.svg deleted file mode 100644 index 2df7520..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bell-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bell-snooze.svg b/app/assets/vendor/heroicons/optimized/24/outline/bell-snooze.svg deleted file mode 100644 index 117de29..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bell-snooze.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bell.svg b/app/assets/vendor/heroicons/optimized/24/outline/bell.svg deleted file mode 100644 index 63ab153..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bell.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bolt-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/bolt-slash.svg deleted file mode 100644 index 13af346..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bolt-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bolt.svg b/app/assets/vendor/heroicons/optimized/24/outline/bolt.svg deleted file mode 100644 index 5e629fe..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bolt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/book-open.svg b/app/assets/vendor/heroicons/optimized/24/outline/book-open.svg deleted file mode 100644 index a4153b6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/book-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bookmark-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/bookmark-slash.svg deleted file mode 100644 index f3ae625..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bookmark-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bookmark-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/bookmark-square.svg deleted file mode 100644 index 00e5cc3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bookmark-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bookmark.svg b/app/assets/vendor/heroicons/optimized/24/outline/bookmark.svg deleted file mode 100644 index 6d06e4f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bookmark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/briefcase.svg b/app/assets/vendor/heroicons/optimized/24/outline/briefcase.svg deleted file mode 100644 index adab6ff..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/briefcase.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/bug-ant.svg b/app/assets/vendor/heroicons/optimized/24/outline/bug-ant.svg deleted file mode 100644 index ac04fad..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/bug-ant.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/building-library.svg b/app/assets/vendor/heroicons/optimized/24/outline/building-library.svg deleted file mode 100644 index 4e2e1da..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/building-library.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/building-office-2.svg b/app/assets/vendor/heroicons/optimized/24/outline/building-office-2.svg deleted file mode 100644 index 45e063c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/building-office-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/building-office.svg b/app/assets/vendor/heroicons/optimized/24/outline/building-office.svg deleted file mode 100644 index 0efd982..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/building-office.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/building-storefront.svg b/app/assets/vendor/heroicons/optimized/24/outline/building-storefront.svg deleted file mode 100644 index 31fca55..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/building-storefront.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cake.svg b/app/assets/vendor/heroicons/optimized/24/outline/cake.svg deleted file mode 100644 index a603e90..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cake.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/calculator.svg b/app/assets/vendor/heroicons/optimized/24/outline/calculator.svg deleted file mode 100644 index d97740e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/calculator.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/calendar-days.svg b/app/assets/vendor/heroicons/optimized/24/outline/calendar-days.svg deleted file mode 100644 index 64b5f8f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/calendar-days.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/calendar.svg b/app/assets/vendor/heroicons/optimized/24/outline/calendar.svg deleted file mode 100644 index 5e44911..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/calendar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/camera.svg b/app/assets/vendor/heroicons/optimized/24/outline/camera.svg deleted file mode 100644 index b8bdae3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/camera.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chart-bar-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/chart-bar-square.svg deleted file mode 100644 index d7fa42c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chart-bar-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/outline/chart-bar.svg deleted file mode 100644 index 27f20fa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chart-pie.svg b/app/assets/vendor/heroicons/optimized/24/outline/chart-pie.svg deleted file mode 100644 index fa51c16..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chart-pie.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center-text.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center-text.svg deleted file mode 100644 index 4bc306e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center.svg deleted file mode 100644 index d59d02a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-ellipsis.svg deleted file mode 100644 index 9a0ec73..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-right.svg deleted file mode 100644 index 4d366b8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left.svg deleted file mode 100644 index a41bf1e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left-ellipsis.svg deleted file mode 100644 index 83d1751..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left.svg deleted file mode 100644 index d0d0d89..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/check-badge.svg b/app/assets/vendor/heroicons/optimized/24/outline/check-badge.svg deleted file mode 100644 index 8d6b79a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/check-badge.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/check-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/check-circle.svg deleted file mode 100644 index d4471d6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/check-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/check.svg b/app/assets/vendor/heroicons/optimized/24/outline/check.svg deleted file mode 100644 index 7644e30..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-down.svg deleted file mode 100644 index d7e9370..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-left.svg deleted file mode 100644 index 95834af..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-right.svg deleted file mode 100644 index 37a809d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-up.svg deleted file mode 100644 index 5182691..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-double-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-down.svg deleted file mode 100644 index b38efa5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-left.svg deleted file mode 100644 index 73fe99a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-right.svg deleted file mode 100644 index 1e31bfd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-up-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-up-down.svg deleted file mode 100644 index 27b1d4f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/chevron-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/chevron-up.svg deleted file mode 100644 index 713a6f1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/chevron-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/circle-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/circle-stack.svg deleted file mode 100644 index b8fb769..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/circle-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-check.svg b/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-check.svg deleted file mode 100644 index 7bb03a1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-list.svg b/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-list.svg deleted file mode 100644 index 4670777..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document.svg b/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document.svg deleted file mode 100644 index 783a333..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/clipboard-document.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/clipboard.svg b/app/assets/vendor/heroicons/optimized/24/outline/clipboard.svg deleted file mode 100644 index ad9b943..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/clipboard.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/clock.svg b/app/assets/vendor/heroicons/optimized/24/outline/clock.svg deleted file mode 100644 index 337196c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-down.svg deleted file mode 100644 index 7074791..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-up.svg deleted file mode 100644 index 8b45081..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cloud.svg b/app/assets/vendor/heroicons/optimized/24/outline/cloud.svg deleted file mode 100644 index 55fd725..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/code-bracket-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/code-bracket-square.svg deleted file mode 100644 index 8308024..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/code-bracket-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/code-bracket.svg b/app/assets/vendor/heroicons/optimized/24/outline/code-bracket.svg deleted file mode 100644 index 3361add..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/code-bracket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cog-6-tooth.svg b/app/assets/vendor/heroicons/optimized/24/outline/cog-6-tooth.svg deleted file mode 100644 index d585645..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cog-6-tooth.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cog-8-tooth.svg b/app/assets/vendor/heroicons/optimized/24/outline/cog-8-tooth.svg deleted file mode 100644 index 28f85f4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cog-8-tooth.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cog.svg b/app/assets/vendor/heroicons/optimized/24/outline/cog.svg deleted file mode 100644 index f2bad9f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cog.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/command-line.svg b/app/assets/vendor/heroicons/optimized/24/outline/command-line.svg deleted file mode 100644 index baaf362..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/command-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/computer-desktop.svg b/app/assets/vendor/heroicons/optimized/24/outline/computer-desktop.svg deleted file mode 100644 index fb9a6e0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/computer-desktop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cpu-chip.svg b/app/assets/vendor/heroicons/optimized/24/outline/cpu-chip.svg deleted file mode 100644 index cabc435..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cpu-chip.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/credit-card.svg b/app/assets/vendor/heroicons/optimized/24/outline/credit-card.svg deleted file mode 100644 index 3c0c917..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/credit-card.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cube-transparent.svg b/app/assets/vendor/heroicons/optimized/24/outline/cube-transparent.svg deleted file mode 100644 index 5a8adac..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cube-transparent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cube.svg b/app/assets/vendor/heroicons/optimized/24/outline/cube.svg deleted file mode 100644 index 70b0091..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cube.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-bangladeshi.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-bangladeshi.svg deleted file mode 100644 index 7f2fca3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-bangladeshi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-dollar.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-dollar.svg deleted file mode 100644 index d376f4c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-dollar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-euro.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-euro.svg deleted file mode 100644 index 8b9dd2e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-euro.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-pound.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-pound.svg deleted file mode 100644 index 8e7c52d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-pound.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-rupee.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-rupee.svg deleted file mode 100644 index 078bf05..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-rupee.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/currency-yen.svg b/app/assets/vendor/heroicons/optimized/24/outline/currency-yen.svg deleted file mode 100644 index 254011a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/currency-yen.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-rays.svg b/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-rays.svg deleted file mode 100644 index c29d0fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-rays.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-ripple.svg b/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-ripple.svg deleted file mode 100644 index 500a04c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-ripple.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/device-phone-mobile.svg b/app/assets/vendor/heroicons/optimized/24/outline/device-phone-mobile.svg deleted file mode 100644 index 1caf911..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/device-phone-mobile.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/device-tablet.svg b/app/assets/vendor/heroicons/optimized/24/outline/device-tablet.svg deleted file mode 100644 index 7090ecb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/device-tablet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-down.svg deleted file mode 100644 index 04f6e65..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-up.svg deleted file mode 100644 index c0ca80f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-chart-bar.svg deleted file mode 100644 index 2ffa3fe..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-check.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-check.svg deleted file mode 100644 index 5ea7d9c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-duplicate.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-duplicate.svg deleted file mode 100644 index acc6464..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-duplicate.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-magnifying-glass.svg deleted file mode 100644 index f94eff6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-magnifying-glass.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-minus.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-minus.svg deleted file mode 100644 index 173cb1f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-plus.svg deleted file mode 100644 index 9ec31ad..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document-text.svg b/app/assets/vendor/heroicons/optimized/24/outline/document-text.svg deleted file mode 100644 index cd77136..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/document.svg b/app/assets/vendor/heroicons/optimized/24/outline/document.svg deleted file mode 100644 index 863a8aa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/document.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal-circle.svg deleted file mode 100644 index 09aac53..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal.svg b/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal.svg deleted file mode 100644 index 7541be5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-vertical.svg b/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-vertical.svg deleted file mode 100644 index 4676cf3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/ellipsis-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/envelope-open.svg b/app/assets/vendor/heroicons/optimized/24/outline/envelope-open.svg deleted file mode 100644 index ff9dccd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/envelope-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/envelope.svg b/app/assets/vendor/heroicons/optimized/24/outline/envelope.svg deleted file mode 100644 index ae8ff72..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/envelope.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/exclamation-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/exclamation-circle.svg deleted file mode 100644 index 25ef36f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/exclamation-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/exclamation-triangle.svg b/app/assets/vendor/heroicons/optimized/24/outline/exclamation-triangle.svg deleted file mode 100644 index c9742f1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/exclamation-triangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/eye-dropper.svg b/app/assets/vendor/heroicons/optimized/24/outline/eye-dropper.svg deleted file mode 100644 index c7263e1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/eye-dropper.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/eye-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/eye-slash.svg deleted file mode 100644 index 072c9f2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/eye-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/eye.svg b/app/assets/vendor/heroicons/optimized/24/outline/eye.svg deleted file mode 100644 index 2a54d63..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/eye.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/face-frown.svg b/app/assets/vendor/heroicons/optimized/24/outline/face-frown.svg deleted file mode 100644 index ba0cab3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/face-frown.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/face-smile.svg b/app/assets/vendor/heroicons/optimized/24/outline/face-smile.svg deleted file mode 100644 index 5246524..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/face-smile.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/film.svg b/app/assets/vendor/heroicons/optimized/24/outline/film.svg deleted file mode 100644 index d76e594..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/film.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/finger-print.svg b/app/assets/vendor/heroicons/optimized/24/outline/finger-print.svg deleted file mode 100644 index 0c1eeb2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/finger-print.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/fire.svg b/app/assets/vendor/heroicons/optimized/24/outline/fire.svg deleted file mode 100644 index 54c9748..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/fire.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/flag.svg b/app/assets/vendor/heroicons/optimized/24/outline/flag.svg deleted file mode 100644 index dff4126..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/flag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/folder-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/folder-arrow-down.svg deleted file mode 100644 index 96290cd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/folder-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/folder-minus.svg b/app/assets/vendor/heroicons/optimized/24/outline/folder-minus.svg deleted file mode 100644 index 824cb0e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/folder-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/folder-open.svg b/app/assets/vendor/heroicons/optimized/24/outline/folder-open.svg deleted file mode 100644 index 0721502..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/folder-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/folder-plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/folder-plus.svg deleted file mode 100644 index 3df62d2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/folder-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/folder.svg b/app/assets/vendor/heroicons/optimized/24/outline/folder.svg deleted file mode 100644 index 3054819..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/folder.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/forward.svg b/app/assets/vendor/heroicons/optimized/24/outline/forward.svg deleted file mode 100644 index cc80dc9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/forward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/funnel.svg b/app/assets/vendor/heroicons/optimized/24/outline/funnel.svg deleted file mode 100644 index 338fa52..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/funnel.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/gif.svg b/app/assets/vendor/heroicons/optimized/24/outline/gif.svg deleted file mode 100644 index ba8a186..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/gif.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/gift-top.svg b/app/assets/vendor/heroicons/optimized/24/outline/gift-top.svg deleted file mode 100644 index 055b6d2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/gift-top.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/gift.svg b/app/assets/vendor/heroicons/optimized/24/outline/gift.svg deleted file mode 100644 index 5445815..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/gift.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/globe-alt.svg b/app/assets/vendor/heroicons/optimized/24/outline/globe-alt.svg deleted file mode 100644 index a605be0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/globe-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/globe-americas.svg b/app/assets/vendor/heroicons/optimized/24/outline/globe-americas.svg deleted file mode 100644 index 5d1a5cb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/globe-americas.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/globe-asia-australia.svg b/app/assets/vendor/heroicons/optimized/24/outline/globe-asia-australia.svg deleted file mode 100644 index f4898fa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/globe-asia-australia.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/globe-europe-africa.svg b/app/assets/vendor/heroicons/optimized/24/outline/globe-europe-africa.svg deleted file mode 100644 index c8f797d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/globe-europe-africa.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/hand-raised.svg b/app/assets/vendor/heroicons/optimized/24/outline/hand-raised.svg deleted file mode 100644 index 859f1ab..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/hand-raised.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-down.svg deleted file mode 100644 index c588a53..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-up.svg b/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-up.svg deleted file mode 100644 index 66ca9c3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/hand-thumb-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/hashtag.svg b/app/assets/vendor/heroicons/optimized/24/outline/hashtag.svg deleted file mode 100644 index 3ae1060..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/hashtag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/heart.svg b/app/assets/vendor/heroicons/optimized/24/outline/heart.svg deleted file mode 100644 index 1084768..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/heart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/home-modern.svg b/app/assets/vendor/heroicons/optimized/24/outline/home-modern.svg deleted file mode 100644 index 20f4e2c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/home-modern.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/home.svg b/app/assets/vendor/heroicons/optimized/24/outline/home.svg deleted file mode 100644 index 9543375..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/home.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/identification.svg b/app/assets/vendor/heroicons/optimized/24/outline/identification.svg deleted file mode 100644 index bfd302a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/identification.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/inbox-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/outline/inbox-arrow-down.svg deleted file mode 100644 index db6ebda..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/inbox-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/inbox-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/inbox-stack.svg deleted file mode 100644 index 6c1e55c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/inbox-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/inbox.svg b/app/assets/vendor/heroicons/optimized/24/outline/inbox.svg deleted file mode 100644 index 56b35cb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/inbox.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/information-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/information-circle.svg deleted file mode 100644 index c7fa9d7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/information-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/key.svg b/app/assets/vendor/heroicons/optimized/24/outline/key.svg deleted file mode 100644 index e9684cd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/key.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/language.svg b/app/assets/vendor/heroicons/optimized/24/outline/language.svg deleted file mode 100644 index 0c606ef..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/language.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/lifebuoy.svg b/app/assets/vendor/heroicons/optimized/24/outline/lifebuoy.svg deleted file mode 100644 index 1660e99..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/lifebuoy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/light-bulb.svg b/app/assets/vendor/heroicons/optimized/24/outline/light-bulb.svg deleted file mode 100644 index e3f2d9a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/light-bulb.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/link.svg b/app/assets/vendor/heroicons/optimized/24/outline/link.svg deleted file mode 100644 index 916a703..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/link.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/list-bullet.svg b/app/assets/vendor/heroicons/optimized/24/outline/list-bullet.svg deleted file mode 100644 index 1474573..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/list-bullet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/lock-closed.svg b/app/assets/vendor/heroicons/optimized/24/outline/lock-closed.svg deleted file mode 100644 index 08b23c9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/lock-closed.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/lock-open.svg b/app/assets/vendor/heroicons/optimized/24/outline/lock-open.svg deleted file mode 100644 index c5595dd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/lock-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-circle.svg deleted file mode 100644 index e71f8bf..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-minus.svg b/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-minus.svg deleted file mode 100644 index 6bd11c1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-plus.svg deleted file mode 100644 index 5dab7de..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass.svg deleted file mode 100644 index 7cff88f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/magnifying-glass.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/map-pin.svg b/app/assets/vendor/heroicons/optimized/24/outline/map-pin.svg deleted file mode 100644 index 1f272f4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/map-pin.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/map.svg b/app/assets/vendor/heroicons/optimized/24/outline/map.svg deleted file mode 100644 index f96c988..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/map.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/megaphone.svg b/app/assets/vendor/heroicons/optimized/24/outline/megaphone.svg deleted file mode 100644 index ec19508..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/megaphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/microphone.svg b/app/assets/vendor/heroicons/optimized/24/outline/microphone.svg deleted file mode 100644 index 670b34f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/microphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/minus-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/minus-circle.svg deleted file mode 100644 index b9630fc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/minus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/minus-small.svg b/app/assets/vendor/heroicons/optimized/24/outline/minus-small.svg deleted file mode 100644 index 3e1a8b7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/minus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/minus.svg b/app/assets/vendor/heroicons/optimized/24/outline/minus.svg deleted file mode 100644 index 781994c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/moon.svg b/app/assets/vendor/heroicons/optimized/24/outline/moon.svg deleted file mode 100644 index 91501fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/moon.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/musical-note.svg b/app/assets/vendor/heroicons/optimized/24/outline/musical-note.svg deleted file mode 100644 index c0667fc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/musical-note.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/newspaper.svg b/app/assets/vendor/heroicons/optimized/24/outline/newspaper.svg deleted file mode 100644 index 0a4ac57..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/newspaper.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/no-symbol.svg b/app/assets/vendor/heroicons/optimized/24/outline/no-symbol.svg deleted file mode 100644 index 19b0bd0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/no-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/paint-brush.svg b/app/assets/vendor/heroicons/optimized/24/outline/paint-brush.svg deleted file mode 100644 index b66098f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/paint-brush.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/paper-airplane.svg b/app/assets/vendor/heroicons/optimized/24/outline/paper-airplane.svg deleted file mode 100644 index 32da43e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/paper-airplane.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/paper-clip.svg b/app/assets/vendor/heroicons/optimized/24/outline/paper-clip.svg deleted file mode 100644 index 1d78d81..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/paper-clip.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/pause-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/pause-circle.svg deleted file mode 100644 index a9a9e93..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/pause-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/pause.svg b/app/assets/vendor/heroicons/optimized/24/outline/pause.svg deleted file mode 100644 index 9843f7b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/pencil-square.svg b/app/assets/vendor/heroicons/optimized/24/outline/pencil-square.svg deleted file mode 100644 index 3de435b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/pencil-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/pencil.svg b/app/assets/vendor/heroicons/optimized/24/outline/pencil.svg deleted file mode 100644 index 0c8759a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/pencil.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-down-left.svg deleted file mode 100644 index b1b2e61..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-down-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-up-right.svg deleted file mode 100644 index faaf659..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/phone-arrow-up-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/phone-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/outline/phone-x-mark.svg deleted file mode 100644 index 0b8de6d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/phone-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/phone.svg b/app/assets/vendor/heroicons/optimized/24/outline/phone.svg deleted file mode 100644 index 6f73149..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/phone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/photo.svg b/app/assets/vendor/heroicons/optimized/24/outline/photo.svg deleted file mode 100644 index 6982a11..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/photo.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/play-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/play-circle.svg deleted file mode 100644 index 3a2fa63..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/play-circle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/play-pause.svg b/app/assets/vendor/heroicons/optimized/24/outline/play-pause.svg deleted file mode 100644 index 4ce4e55..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/play-pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/play.svg b/app/assets/vendor/heroicons/optimized/24/outline/play.svg deleted file mode 100644 index c0ae6de..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/play.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/plus-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/plus-circle.svg deleted file mode 100644 index 4da4d1f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/plus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/plus-small.svg b/app/assets/vendor/heroicons/optimized/24/outline/plus-small.svg deleted file mode 100644 index 991ed59..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/plus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/plus.svg deleted file mode 100644 index 0480817..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/power.svg b/app/assets/vendor/heroicons/optimized/24/outline/power.svg deleted file mode 100644 index c4b2706..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/power.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-bar.svg deleted file mode 100644 index 87d8a6d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-line.svg b/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-line.svg deleted file mode 100644 index 2262e1f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/presentation-chart-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/printer.svg b/app/assets/vendor/heroicons/optimized/24/outline/printer.svg deleted file mode 100644 index 6f7c5fa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/printer.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/puzzle-piece.svg b/app/assets/vendor/heroicons/optimized/24/outline/puzzle-piece.svg deleted file mode 100644 index 13aa1a5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/puzzle-piece.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/qr-code.svg b/app/assets/vendor/heroicons/optimized/24/outline/qr-code.svg deleted file mode 100644 index 662a4bd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/qr-code.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/question-mark-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/question-mark-circle.svg deleted file mode 100644 index 9fb2542..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/question-mark-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/queue-list.svg b/app/assets/vendor/heroicons/optimized/24/outline/queue-list.svg deleted file mode 100644 index 91c3f11..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/queue-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/radio.svg b/app/assets/vendor/heroicons/optimized/24/outline/radio.svg deleted file mode 100644 index f9c177a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/radio.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/receipt-percent.svg b/app/assets/vendor/heroicons/optimized/24/outline/receipt-percent.svg deleted file mode 100644 index 2d19255..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/receipt-percent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/receipt-refund.svg b/app/assets/vendor/heroicons/optimized/24/outline/receipt-refund.svg deleted file mode 100644 index dc569fc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/receipt-refund.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/rectangle-group.svg b/app/assets/vendor/heroicons/optimized/24/outline/rectangle-group.svg deleted file mode 100644 index b184964..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/rectangle-group.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/rectangle-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/rectangle-stack.svg deleted file mode 100644 index e1c0272..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/rectangle-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/rocket-launch.svg b/app/assets/vendor/heroicons/optimized/24/outline/rocket-launch.svg deleted file mode 100644 index 6400ee8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/rocket-launch.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/rss.svg b/app/assets/vendor/heroicons/optimized/24/outline/rss.svg deleted file mode 100644 index 1c36b21..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/rss.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/scale.svg b/app/assets/vendor/heroicons/optimized/24/outline/scale.svg deleted file mode 100644 index 500e3c6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/scale.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/scissors.svg b/app/assets/vendor/heroicons/optimized/24/outline/scissors.svg deleted file mode 100644 index a23dc81..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/scissors.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/server-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/server-stack.svg deleted file mode 100644 index 3b7fe32..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/server-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/server.svg b/app/assets/vendor/heroicons/optimized/24/outline/server.svg deleted file mode 100644 index c1675f3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/server.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/share.svg b/app/assets/vendor/heroicons/optimized/24/outline/share.svg deleted file mode 100644 index 125b6d1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/share.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/shield-check.svg b/app/assets/vendor/heroicons/optimized/24/outline/shield-check.svg deleted file mode 100644 index f9fa2b9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/shield-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/shield-exclamation.svg b/app/assets/vendor/heroicons/optimized/24/outline/shield-exclamation.svg deleted file mode 100644 index b52a2ff..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/shield-exclamation.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/shopping-bag.svg b/app/assets/vendor/heroicons/optimized/24/outline/shopping-bag.svg deleted file mode 100644 index f5a51bd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/shopping-bag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/shopping-cart.svg b/app/assets/vendor/heroicons/optimized/24/outline/shopping-cart.svg deleted file mode 100644 index 661477b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/shopping-cart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/signal-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/signal-slash.svg deleted file mode 100644 index 62992c3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/signal-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/signal.svg b/app/assets/vendor/heroicons/optimized/24/outline/signal.svg deleted file mode 100644 index 56114d3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/signal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/sparkles.svg b/app/assets/vendor/heroicons/optimized/24/outline/sparkles.svg deleted file mode 100644 index 5a78b09..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/sparkles.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/speaker-wave.svg b/app/assets/vendor/heroicons/optimized/24/outline/speaker-wave.svg deleted file mode 100644 index 1b6dde7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/speaker-wave.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/speaker-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/outline/speaker-x-mark.svg deleted file mode 100644 index 427e21e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/speaker-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/square-2-stack.svg b/app/assets/vendor/heroicons/optimized/24/outline/square-2-stack.svg deleted file mode 100644 index bc5e253..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/square-2-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/square-3-stack-3d.svg b/app/assets/vendor/heroicons/optimized/24/outline/square-3-stack-3d.svg deleted file mode 100644 index 8af2704..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/square-3-stack-3d.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/squares-2x2.svg b/app/assets/vendor/heroicons/optimized/24/outline/squares-2x2.svg deleted file mode 100644 index 601366d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/squares-2x2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/squares-plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/squares-plus.svg deleted file mode 100644 index b8033c1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/squares-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/star.svg b/app/assets/vendor/heroicons/optimized/24/outline/star.svg deleted file mode 100644 index 98aa481..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/star.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/stop-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/stop-circle.svg deleted file mode 100644 index b570e8e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/stop-circle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/stop.svg b/app/assets/vendor/heroicons/optimized/24/outline/stop.svg deleted file mode 100644 index 4ee917a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/stop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/sun.svg b/app/assets/vendor/heroicons/optimized/24/outline/sun.svg deleted file mode 100644 index 5667cb3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/sun.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/swatch.svg b/app/assets/vendor/heroicons/optimized/24/outline/swatch.svg deleted file mode 100644 index 5b136eb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/swatch.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/table-cells.svg b/app/assets/vendor/heroicons/optimized/24/outline/table-cells.svg deleted file mode 100644 index cb37937..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/table-cells.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/tag.svg b/app/assets/vendor/heroicons/optimized/24/outline/tag.svg deleted file mode 100644 index 9620545..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/tag.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/ticket.svg b/app/assets/vendor/heroicons/optimized/24/outline/ticket.svg deleted file mode 100644 index da2d69e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/ticket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/trash.svg b/app/assets/vendor/heroicons/optimized/24/outline/trash.svg deleted file mode 100644 index 0d32d58..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/trash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/trophy.svg b/app/assets/vendor/heroicons/optimized/24/outline/trophy.svg deleted file mode 100644 index f846e52..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/trophy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/truck.svg b/app/assets/vendor/heroicons/optimized/24/outline/truck.svg deleted file mode 100644 index 6e1ea69..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/truck.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/tv.svg b/app/assets/vendor/heroicons/optimized/24/outline/tv.svg deleted file mode 100644 index 7b8a706..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/tv.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/user-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/user-circle.svg deleted file mode 100644 index a177f26..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/user-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/user-group.svg b/app/assets/vendor/heroicons/optimized/24/outline/user-group.svg deleted file mode 100644 index 4e7089b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/user-group.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/user-minus.svg b/app/assets/vendor/heroicons/optimized/24/outline/user-minus.svg deleted file mode 100644 index 703478e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/user-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/user-plus.svg b/app/assets/vendor/heroicons/optimized/24/outline/user-plus.svg deleted file mode 100644 index 24533d1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/user-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/user.svg b/app/assets/vendor/heroicons/optimized/24/outline/user.svg deleted file mode 100644 index e9b6c20..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/user.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/users.svg b/app/assets/vendor/heroicons/optimized/24/outline/users.svg deleted file mode 100644 index 87304a0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/users.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/variable.svg b/app/assets/vendor/heroicons/optimized/24/outline/variable.svg deleted file mode 100644 index 81fab04..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/variable.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/video-camera-slash.svg b/app/assets/vendor/heroicons/optimized/24/outline/video-camera-slash.svg deleted file mode 100644 index d1de13e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/video-camera-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/video-camera.svg b/app/assets/vendor/heroicons/optimized/24/outline/video-camera.svg deleted file mode 100644 index aae1a19..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/video-camera.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/view-columns.svg b/app/assets/vendor/heroicons/optimized/24/outline/view-columns.svg deleted file mode 100644 index 22a668e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/view-columns.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/viewfinder-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/viewfinder-circle.svg deleted file mode 100644 index 0583eef..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/viewfinder-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/wallet.svg b/app/assets/vendor/heroicons/optimized/24/outline/wallet.svg deleted file mode 100644 index 8f19d64..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/wallet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/wifi.svg b/app/assets/vendor/heroicons/optimized/24/outline/wifi.svg deleted file mode 100644 index 084b3e1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/wifi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/window.svg b/app/assets/vendor/heroicons/optimized/24/outline/window.svg deleted file mode 100644 index 4ffea71..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/window.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/wrench-screwdriver.svg b/app/assets/vendor/heroicons/optimized/24/outline/wrench-screwdriver.svg deleted file mode 100644 index 1023ae9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/wrench-screwdriver.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/wrench.svg b/app/assets/vendor/heroicons/optimized/24/outline/wrench.svg deleted file mode 100644 index de3a6e2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/wrench.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/x-circle.svg b/app/assets/vendor/heroicons/optimized/24/outline/x-circle.svg deleted file mode 100644 index 294ba20..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/x-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/outline/x-mark.svg b/app/assets/vendor/heroicons/optimized/24/outline/x-mark.svg deleted file mode 100644 index a6d9eb7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/outline/x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/academic-cap.svg b/app/assets/vendor/heroicons/optimized/24/solid/academic-cap.svg deleted file mode 100644 index 2a13ef2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/academic-cap.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/adjustments-horizontal.svg b/app/assets/vendor/heroicons/optimized/24/solid/adjustments-horizontal.svg deleted file mode 100644 index ed9b950..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/adjustments-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/adjustments-vertical.svg b/app/assets/vendor/heroicons/optimized/24/solid/adjustments-vertical.svg deleted file mode 100644 index fc4b90c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/adjustments-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/archive-box-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/archive-box-arrow-down.svg deleted file mode 100644 index 5999b72..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/archive-box-arrow-down.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/archive-box-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/solid/archive-box-x-mark.svg deleted file mode 100644 index e7dd0d6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/archive-box-x-mark.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/archive-box.svg b/app/assets/vendor/heroicons/optimized/24/solid/archive-box.svg deleted file mode 100644 index 74e0471..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/archive-box.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-circle.svg deleted file mode 100644 index c85a4ff..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-left.svg deleted file mode 100644 index 5cd0d4d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square-stack.svg deleted file mode 100644 index d2ef0b3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square.svg deleted file mode 100644 index 35eab41..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-right.svg deleted file mode 100644 index 8c60942..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-tray.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-tray.svg deleted file mode 100644 index a18c62d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down-tray.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-down.svg deleted file mode 100644 index 5cb396b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-circle.svg deleted file mode 100644 index a937f8e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-on-rectangle.svg deleted file mode 100644 index 972a85e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left-on-rectangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-left.svg deleted file mode 100644 index 51bef70..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-down.svg deleted file mode 100644 index 891774e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-left.svg deleted file mode 100644 index aa12c0c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-right.svg deleted file mode 100644 index 0bcb6a0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-up.svg deleted file mode 100644 index b36d8e0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-long-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-path-rounded-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-path-rounded-square.svg deleted file mode 100644 index 0808a57..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-path-rounded-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-path.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-path.svg deleted file mode 100644 index 48a71fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-circle.svg deleted file mode 100644 index 424f75a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-on-rectangle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-on-rectangle.svg deleted file mode 100644 index 73a7a7e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right-on-rectangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-right.svg deleted file mode 100644 index 1b1bbd1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-down.svg deleted file mode 100644 index 790993f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-left.svg deleted file mode 100644 index 231b1b2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-right.svg deleted file mode 100644 index 5d91261..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-up.svg deleted file mode 100644 index 33b31cf..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-small-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-top-right-on-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-top-right-on-square.svg deleted file mode 100644 index ac1bc37..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-top-right-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-down.svg deleted file mode 100644 index f46b609..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-up.svg deleted file mode 100644 index f2ece6e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-trending-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-circle.svg deleted file mode 100644 index 0a9999f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-left.svg deleted file mode 100644 index b6f9c2e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square-stack.svg deleted file mode 100644 index b661da7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square.svg deleted file mode 100644 index cba893e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-right.svg deleted file mode 100644 index 7554631..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-tray.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-tray.svg deleted file mode 100644 index 19093f6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up-tray.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-up.svg deleted file mode 100644 index 16f6c79..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-down.svg deleted file mode 100644 index 6975024..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-left.svg deleted file mode 100644 index f0b679a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-right.svg deleted file mode 100644 index 2da0f98..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-up.svg deleted file mode 100644 index 8cfe23d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-in.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-in.svg deleted file mode 100644 index 604920f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-in.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-out.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-out.svg deleted file mode 100644 index 2399662..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-out.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrows-right-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrows-right-left.svg deleted file mode 100644 index 93fb7f1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrows-right-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/arrows-up-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/arrows-up-down.svg deleted file mode 100644 index 356e9ca..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/arrows-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/at-symbol.svg b/app/assets/vendor/heroicons/optimized/24/solid/at-symbol.svg deleted file mode 100644 index a02c654..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/at-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/backspace.svg b/app/assets/vendor/heroicons/optimized/24/solid/backspace.svg deleted file mode 100644 index e5a79c2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/backspace.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/backward.svg b/app/assets/vendor/heroicons/optimized/24/solid/backward.svg deleted file mode 100644 index bdf2a01..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/backward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/banknotes.svg b/app/assets/vendor/heroicons/optimized/24/solid/banknotes.svg deleted file mode 100644 index 1cc1803..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/banknotes.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-2.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-2.svg deleted file mode 100644 index 6ee47ab..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-left.svg deleted file mode 100644 index a804c11..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-right.svg deleted file mode 100644 index 2fd11ad..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-center-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-3-center-left.svg deleted file mode 100644 index 9a2c170..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-3-center-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-3.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-3.svg deleted file mode 100644 index 85584e8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-3.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-4.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-4.svg deleted file mode 100644 index e3591d1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-4.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-down.svg deleted file mode 100644 index 10140b8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-up.svg deleted file mode 100644 index 4b3d4a7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bars-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/battery-0.svg b/app/assets/vendor/heroicons/optimized/24/solid/battery-0.svg deleted file mode 100644 index f03a737..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/battery-0.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/battery-100.svg b/app/assets/vendor/heroicons/optimized/24/solid/battery-100.svg deleted file mode 100644 index 62e4ec9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/battery-100.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/battery-50.svg b/app/assets/vendor/heroicons/optimized/24/solid/battery-50.svg deleted file mode 100644 index 63344d7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/battery-50.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/beaker.svg b/app/assets/vendor/heroicons/optimized/24/solid/beaker.svg deleted file mode 100644 index e0b73cc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/beaker.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bell-alert.svg b/app/assets/vendor/heroicons/optimized/24/solid/bell-alert.svg deleted file mode 100644 index f280b00..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bell-alert.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bell-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/bell-slash.svg deleted file mode 100644 index 0ef076c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bell-slash.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bell-snooze.svg b/app/assets/vendor/heroicons/optimized/24/solid/bell-snooze.svg deleted file mode 100644 index cf93ae0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bell-snooze.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bell.svg b/app/assets/vendor/heroicons/optimized/24/solid/bell.svg deleted file mode 100644 index 818496e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bell.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bolt-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/bolt-slash.svg deleted file mode 100644 index 59d24f7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bolt-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bolt.svg b/app/assets/vendor/heroicons/optimized/24/solid/bolt.svg deleted file mode 100644 index 596c47a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bolt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/book-open.svg b/app/assets/vendor/heroicons/optimized/24/solid/book-open.svg deleted file mode 100644 index 2e0a181..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/book-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bookmark-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/bookmark-slash.svg deleted file mode 100644 index 8435a02..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bookmark-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bookmark-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/bookmark-square.svg deleted file mode 100644 index a4d3ca5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bookmark-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bookmark.svg b/app/assets/vendor/heroicons/optimized/24/solid/bookmark.svg deleted file mode 100644 index e9f3fb7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bookmark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/briefcase.svg b/app/assets/vendor/heroicons/optimized/24/solid/briefcase.svg deleted file mode 100644 index a66af56..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/briefcase.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/bug-ant.svg b/app/assets/vendor/heroicons/optimized/24/solid/bug-ant.svg deleted file mode 100644 index 3c16cbc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/bug-ant.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/building-library.svg b/app/assets/vendor/heroicons/optimized/24/solid/building-library.svg deleted file mode 100644 index 90f8640..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/building-library.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/building-office-2.svg b/app/assets/vendor/heroicons/optimized/24/solid/building-office-2.svg deleted file mode 100644 index 240eedb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/building-office-2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/building-office.svg b/app/assets/vendor/heroicons/optimized/24/solid/building-office.svg deleted file mode 100644 index 9883e33..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/building-office.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/building-storefront.svg b/app/assets/vendor/heroicons/optimized/24/solid/building-storefront.svg deleted file mode 100644 index f3b54ba..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/building-storefront.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cake.svg b/app/assets/vendor/heroicons/optimized/24/solid/cake.svg deleted file mode 100644 index f13b308..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cake.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/calculator.svg b/app/assets/vendor/heroicons/optimized/24/solid/calculator.svg deleted file mode 100644 index e058510..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/calculator.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/calendar-days.svg b/app/assets/vendor/heroicons/optimized/24/solid/calendar-days.svg deleted file mode 100644 index 0df9b16..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/calendar-days.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/calendar.svg b/app/assets/vendor/heroicons/optimized/24/solid/calendar.svg deleted file mode 100644 index 27e208c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/calendar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/camera.svg b/app/assets/vendor/heroicons/optimized/24/solid/camera.svg deleted file mode 100644 index e58165d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/camera.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chart-bar-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/chart-bar-square.svg deleted file mode 100644 index d4af840..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chart-bar-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/solid/chart-bar.svg deleted file mode 100644 index abe5349..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chart-pie.svg b/app/assets/vendor/heroicons/optimized/24/solid/chart-pie.svg deleted file mode 100644 index 5aea729..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chart-pie.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center-text.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center-text.svg deleted file mode 100644 index bff24c4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center.svg deleted file mode 100644 index eab7a41..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-ellipsis.svg deleted file mode 100644 index 1ee6159..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-right.svg deleted file mode 100644 index 80ad26d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-right.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left.svg deleted file mode 100644 index 3dd81b7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left-ellipsis.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left-ellipsis.svg deleted file mode 100644 index 815c6d7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left-ellipsis.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left.svg deleted file mode 100644 index 473b921..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/check-badge.svg b/app/assets/vendor/heroicons/optimized/24/solid/check-badge.svg deleted file mode 100644 index 058b329..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/check-badge.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/check-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/check-circle.svg deleted file mode 100644 index 2b90831..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/check-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/check.svg b/app/assets/vendor/heroicons/optimized/24/solid/check.svg deleted file mode 100644 index 2a6bc17..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-down.svg deleted file mode 100644 index ddbe304..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-left.svg deleted file mode 100644 index 5c6539d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-right.svg deleted file mode 100644 index 7e25238..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-up.svg deleted file mode 100644 index 029e687..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-double-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-down.svg deleted file mode 100644 index 4f9ce7e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-left.svg deleted file mode 100644 index 2d89e8b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-right.svg deleted file mode 100644 index 36e4859..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-up-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-up-down.svg deleted file mode 100644 index 58edbc3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-up-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/chevron-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/chevron-up.svg deleted file mode 100644 index 9abe9cd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/chevron-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/circle-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/circle-stack.svg deleted file mode 100644 index 5a49d80..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/circle-stack.svg +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-check.svg b/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-check.svg deleted file mode 100644 index 21ec021..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-check.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-list.svg b/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-list.svg deleted file mode 100644 index d60bed5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document-list.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document.svg b/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document.svg deleted file mode 100644 index d70b708..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/clipboard-document.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/clipboard.svg b/app/assets/vendor/heroicons/optimized/24/solid/clipboard.svg deleted file mode 100644 index c09970f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/clipboard.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/clock.svg b/app/assets/vendor/heroicons/optimized/24/solid/clock.svg deleted file mode 100644 index 1d6fb4a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-down.svg deleted file mode 100644 index d6cf7c5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-up.svg deleted file mode 100644 index 7e0dcee..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cloud.svg b/app/assets/vendor/heroicons/optimized/24/solid/cloud.svg deleted file mode 100644 index 95d0c73..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/code-bracket-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/code-bracket-square.svg deleted file mode 100644 index 103f73b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/code-bracket-square.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/code-bracket.svg b/app/assets/vendor/heroicons/optimized/24/solid/code-bracket.svg deleted file mode 100644 index 9f331ef..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/code-bracket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cog-6-tooth.svg b/app/assets/vendor/heroicons/optimized/24/solid/cog-6-tooth.svg deleted file mode 100644 index ba6fca5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cog-6-tooth.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cog-8-tooth.svg b/app/assets/vendor/heroicons/optimized/24/solid/cog-8-tooth.svg deleted file mode 100644 index 9b9b1a6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cog-8-tooth.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cog.svg b/app/assets/vendor/heroicons/optimized/24/solid/cog.svg deleted file mode 100644 index e854f73..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cog.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/command-line.svg b/app/assets/vendor/heroicons/optimized/24/solid/command-line.svg deleted file mode 100644 index e2a0af8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/command-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/computer-desktop.svg b/app/assets/vendor/heroicons/optimized/24/solid/computer-desktop.svg deleted file mode 100644 index 5b7f2ef..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/computer-desktop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cpu-chip.svg b/app/assets/vendor/heroicons/optimized/24/solid/cpu-chip.svg deleted file mode 100644 index e20f6fb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cpu-chip.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/credit-card.svg b/app/assets/vendor/heroicons/optimized/24/solid/credit-card.svg deleted file mode 100644 index fe4dc14..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/credit-card.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cube-transparent.svg b/app/assets/vendor/heroicons/optimized/24/solid/cube-transparent.svg deleted file mode 100644 index 5577f26..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cube-transparent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cube.svg b/app/assets/vendor/heroicons/optimized/24/solid/cube.svg deleted file mode 100644 index b0029f2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cube.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-bangladeshi.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-bangladeshi.svg deleted file mode 100644 index ca13c68..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-bangladeshi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-dollar.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-dollar.svg deleted file mode 100644 index e0155df..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-dollar.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-euro.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-euro.svg deleted file mode 100644 index 2926c25..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-euro.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-pound.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-pound.svg deleted file mode 100644 index 547f725..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-pound.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-rupee.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-rupee.svg deleted file mode 100644 index 2ee9b46..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-rupee.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/currency-yen.svg b/app/assets/vendor/heroicons/optimized/24/solid/currency-yen.svg deleted file mode 100644 index 65ef9bc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/currency-yen.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-rays.svg b/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-rays.svg deleted file mode 100644 index c0e462b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-rays.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-ripple.svg b/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-ripple.svg deleted file mode 100644 index 867faa4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-ripple.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/device-phone-mobile.svg b/app/assets/vendor/heroicons/optimized/24/solid/device-phone-mobile.svg deleted file mode 100644 index eec0738..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/device-phone-mobile.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/device-tablet.svg b/app/assets/vendor/heroicons/optimized/24/solid/device-tablet.svg deleted file mode 100644 index 88e2cc8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/device-tablet.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-down.svg deleted file mode 100644 index 77ac19c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-down.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-up.svg deleted file mode 100644 index bc26cb9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-arrow-up.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-chart-bar.svg deleted file mode 100644 index 83d0eac..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-chart-bar.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-check.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-check.svg deleted file mode 100644 index e827854..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-check.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-duplicate.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-duplicate.svg deleted file mode 100644 index fa7375d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-duplicate.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-magnifying-glass.svg deleted file mode 100644 index ab165f7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-magnifying-glass.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-minus.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-minus.svg deleted file mode 100644 index 265c6eb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-minus.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-plus.svg deleted file mode 100644 index 5e31459..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-plus.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document-text.svg b/app/assets/vendor/heroicons/optimized/24/solid/document-text.svg deleted file mode 100644 index 73b30cd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document-text.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/document.svg b/app/assets/vendor/heroicons/optimized/24/solid/document.svg deleted file mode 100644 index a05f20f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/document.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal-circle.svg deleted file mode 100644 index 6ec2b50..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal.svg b/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal.svg deleted file mode 100644 index ddb5a3f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-vertical.svg b/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-vertical.svg deleted file mode 100644 index 792c0ae..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/ellipsis-vertical.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/envelope-open.svg b/app/assets/vendor/heroicons/optimized/24/solid/envelope-open.svg deleted file mode 100644 index e6bf97b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/envelope-open.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/envelope.svg b/app/assets/vendor/heroicons/optimized/24/solid/envelope.svg deleted file mode 100644 index 702341b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/envelope.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/exclamation-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/exclamation-circle.svg deleted file mode 100644 index fdaadc0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/exclamation-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/exclamation-triangle.svg b/app/assets/vendor/heroicons/optimized/24/solid/exclamation-triangle.svg deleted file mode 100644 index 627a712..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/exclamation-triangle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/eye-dropper.svg b/app/assets/vendor/heroicons/optimized/24/solid/eye-dropper.svg deleted file mode 100644 index 15b16d0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/eye-dropper.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/eye-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/eye-slash.svg deleted file mode 100644 index 11ef99b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/eye-slash.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/eye.svg b/app/assets/vendor/heroicons/optimized/24/solid/eye.svg deleted file mode 100644 index a648db3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/eye.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/face-frown.svg b/app/assets/vendor/heroicons/optimized/24/solid/face-frown.svg deleted file mode 100644 index 7040d58..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/face-frown.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/face-smile.svg b/app/assets/vendor/heroicons/optimized/24/solid/face-smile.svg deleted file mode 100644 index d5e75a2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/face-smile.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/film.svg b/app/assets/vendor/heroicons/optimized/24/solid/film.svg deleted file mode 100644 index fbd26cc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/film.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/finger-print.svg b/app/assets/vendor/heroicons/optimized/24/solid/finger-print.svg deleted file mode 100644 index 68e72b4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/finger-print.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/fire.svg b/app/assets/vendor/heroicons/optimized/24/solid/fire.svg deleted file mode 100644 index 93b1b1f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/fire.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/flag.svg b/app/assets/vendor/heroicons/optimized/24/solid/flag.svg deleted file mode 100644 index 8c67b01..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/flag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/folder-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/folder-arrow-down.svg deleted file mode 100644 index 5d963b4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/folder-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/folder-minus.svg b/app/assets/vendor/heroicons/optimized/24/solid/folder-minus.svg deleted file mode 100644 index d0292b8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/folder-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/folder-open.svg b/app/assets/vendor/heroicons/optimized/24/solid/folder-open.svg deleted file mode 100644 index b9d80ba..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/folder-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/folder-plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/folder-plus.svg deleted file mode 100644 index efaf949..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/folder-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/folder.svg b/app/assets/vendor/heroicons/optimized/24/solid/folder.svg deleted file mode 100644 index a7847f8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/folder.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/forward.svg b/app/assets/vendor/heroicons/optimized/24/solid/forward.svg deleted file mode 100644 index de90863..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/forward.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/funnel.svg b/app/assets/vendor/heroicons/optimized/24/solid/funnel.svg deleted file mode 100644 index fe5699f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/funnel.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/gif.svg b/app/assets/vendor/heroicons/optimized/24/solid/gif.svg deleted file mode 100644 index 283e6e5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/gif.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/gift-top.svg b/app/assets/vendor/heroicons/optimized/24/solid/gift-top.svg deleted file mode 100644 index 4bd4e6f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/gift-top.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/gift.svg b/app/assets/vendor/heroicons/optimized/24/solid/gift.svg deleted file mode 100644 index 2ca6c92..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/gift.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/globe-alt.svg b/app/assets/vendor/heroicons/optimized/24/solid/globe-alt.svg deleted file mode 100644 index 0cbacae..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/globe-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/globe-americas.svg b/app/assets/vendor/heroicons/optimized/24/solid/globe-americas.svg deleted file mode 100644 index 5ae0d5d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/globe-americas.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/globe-asia-australia.svg b/app/assets/vendor/heroicons/optimized/24/solid/globe-asia-australia.svg deleted file mode 100644 index 14249d6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/globe-asia-australia.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/globe-europe-africa.svg b/app/assets/vendor/heroicons/optimized/24/solid/globe-europe-africa.svg deleted file mode 100644 index 49a78fd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/globe-europe-africa.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/hand-raised.svg b/app/assets/vendor/heroicons/optimized/24/solid/hand-raised.svg deleted file mode 100644 index 1717d51..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/hand-raised.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-down.svg deleted file mode 100644 index 7a2b9a6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-up.svg b/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-up.svg deleted file mode 100644 index 4942d2d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/hand-thumb-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/hashtag.svg b/app/assets/vendor/heroicons/optimized/24/solid/hashtag.svg deleted file mode 100644 index 29e677d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/hashtag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/heart.svg b/app/assets/vendor/heroicons/optimized/24/solid/heart.svg deleted file mode 100644 index b5f0d95..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/heart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/home-modern.svg b/app/assets/vendor/heroicons/optimized/24/solid/home-modern.svg deleted file mode 100644 index 488685a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/home-modern.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/home.svg b/app/assets/vendor/heroicons/optimized/24/solid/home.svg deleted file mode 100644 index ec0bae1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/home.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/identification.svg b/app/assets/vendor/heroicons/optimized/24/solid/identification.svg deleted file mode 100644 index 829b24d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/identification.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/inbox-arrow-down.svg b/app/assets/vendor/heroicons/optimized/24/solid/inbox-arrow-down.svg deleted file mode 100644 index 4fd220b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/inbox-arrow-down.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/inbox-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/inbox-stack.svg deleted file mode 100644 index fffab99..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/inbox-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/inbox.svg b/app/assets/vendor/heroicons/optimized/24/solid/inbox.svg deleted file mode 100644 index b74380e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/inbox.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/information-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/information-circle.svg deleted file mode 100644 index bd2723b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/information-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/key.svg b/app/assets/vendor/heroicons/optimized/24/solid/key.svg deleted file mode 100644 index 6acee27..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/key.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/language.svg b/app/assets/vendor/heroicons/optimized/24/solid/language.svg deleted file mode 100644 index 60d1aee..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/language.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/lifebuoy.svg b/app/assets/vendor/heroicons/optimized/24/solid/lifebuoy.svg deleted file mode 100644 index 9ddc8d4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/lifebuoy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/light-bulb.svg b/app/assets/vendor/heroicons/optimized/24/solid/light-bulb.svg deleted file mode 100644 index ff49cb3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/light-bulb.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/link.svg b/app/assets/vendor/heroicons/optimized/24/solid/link.svg deleted file mode 100644 index a6dc093..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/link.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/list-bullet.svg b/app/assets/vendor/heroicons/optimized/24/solid/list-bullet.svg deleted file mode 100644 index 7983877..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/list-bullet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/lock-closed.svg b/app/assets/vendor/heroicons/optimized/24/solid/lock-closed.svg deleted file mode 100644 index 8a5a6d7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/lock-closed.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/lock-open.svg b/app/assets/vendor/heroicons/optimized/24/solid/lock-open.svg deleted file mode 100644 index 4562f7e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/lock-open.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-circle.svg deleted file mode 100644 index 17a6f28..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-circle.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-minus.svg b/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-minus.svg deleted file mode 100644 index 06ae161..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-plus.svg deleted file mode 100644 index 92040d0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass.svg b/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass.svg deleted file mode 100644 index b602e08..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/magnifying-glass.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/map-pin.svg b/app/assets/vendor/heroicons/optimized/24/solid/map-pin.svg deleted file mode 100644 index 92e6785..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/map-pin.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/map.svg b/app/assets/vendor/heroicons/optimized/24/solid/map.svg deleted file mode 100644 index 9d4f7dd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/map.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/megaphone.svg b/app/assets/vendor/heroicons/optimized/24/solid/megaphone.svg deleted file mode 100644 index b1f1e10..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/megaphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/microphone.svg b/app/assets/vendor/heroicons/optimized/24/solid/microphone.svg deleted file mode 100644 index a5f4cb6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/microphone.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/minus-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/minus-circle.svg deleted file mode 100644 index 8c981ab..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/minus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/minus-small.svg b/app/assets/vendor/heroicons/optimized/24/solid/minus-small.svg deleted file mode 100644 index 782213e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/minus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/minus.svg b/app/assets/vendor/heroicons/optimized/24/solid/minus.svg deleted file mode 100644 index 1fa7117..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/moon.svg b/app/assets/vendor/heroicons/optimized/24/solid/moon.svg deleted file mode 100644 index 97d5c5a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/moon.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/musical-note.svg b/app/assets/vendor/heroicons/optimized/24/solid/musical-note.svg deleted file mode 100644 index a9ab9b5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/musical-note.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/newspaper.svg b/app/assets/vendor/heroicons/optimized/24/solid/newspaper.svg deleted file mode 100644 index d1f2c1e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/newspaper.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/no-symbol.svg b/app/assets/vendor/heroicons/optimized/24/solid/no-symbol.svg deleted file mode 100644 index 42eb771..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/no-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/paint-brush.svg b/app/assets/vendor/heroicons/optimized/24/solid/paint-brush.svg deleted file mode 100644 index 35fd5a6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/paint-brush.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/paper-airplane.svg b/app/assets/vendor/heroicons/optimized/24/solid/paper-airplane.svg deleted file mode 100644 index 9365a57..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/paper-airplane.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/paper-clip.svg b/app/assets/vendor/heroicons/optimized/24/solid/paper-clip.svg deleted file mode 100644 index 0a0dcdd..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/paper-clip.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/pause-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/pause-circle.svg deleted file mode 100644 index 4fe4f2b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/pause-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/pause.svg b/app/assets/vendor/heroicons/optimized/24/solid/pause.svg deleted file mode 100644 index 2e121ac..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/pencil-square.svg b/app/assets/vendor/heroicons/optimized/24/solid/pencil-square.svg deleted file mode 100644 index 5f4aaf8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/pencil-square.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/pencil.svg b/app/assets/vendor/heroicons/optimized/24/solid/pencil.svg deleted file mode 100644 index 78ec61a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/pencil.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-down-left.svg b/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-down-left.svg deleted file mode 100644 index 06f3ba0..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-down-left.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-up-right.svg b/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-up-right.svg deleted file mode 100644 index 678c4f6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/phone-arrow-up-right.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/phone-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/solid/phone-x-mark.svg deleted file mode 100644 index a017a7d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/phone-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/phone.svg b/app/assets/vendor/heroicons/optimized/24/solid/phone.svg deleted file mode 100644 index ca2a6bc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/phone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/photo.svg b/app/assets/vendor/heroicons/optimized/24/solid/photo.svg deleted file mode 100644 index 57e023d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/photo.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/play-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/play-circle.svg deleted file mode 100644 index 752273a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/play-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/play-pause.svg b/app/assets/vendor/heroicons/optimized/24/solid/play-pause.svg deleted file mode 100644 index e5bb17c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/play-pause.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/play.svg b/app/assets/vendor/heroicons/optimized/24/solid/play.svg deleted file mode 100644 index da0e4e2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/play.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/plus-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/plus-circle.svg deleted file mode 100644 index b45f965..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/plus-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/plus-small.svg b/app/assets/vendor/heroicons/optimized/24/solid/plus-small.svg deleted file mode 100644 index 0c4b744..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/plus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/plus.svg deleted file mode 100644 index 85d3b14..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/power.svg b/app/assets/vendor/heroicons/optimized/24/solid/power.svg deleted file mode 100644 index 2bf830f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/power.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-bar.svg b/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-bar.svg deleted file mode 100644 index cb0bc9a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-bar.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-line.svg b/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-line.svg deleted file mode 100644 index 54e10b2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/presentation-chart-line.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/printer.svg b/app/assets/vendor/heroicons/optimized/24/solid/printer.svg deleted file mode 100644 index 4fce791..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/printer.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/puzzle-piece.svg b/app/assets/vendor/heroicons/optimized/24/solid/puzzle-piece.svg deleted file mode 100644 index 4f85b37..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/puzzle-piece.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/qr-code.svg b/app/assets/vendor/heroicons/optimized/24/solid/qr-code.svg deleted file mode 100644 index 7f676ca..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/qr-code.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/question-mark-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/question-mark-circle.svg deleted file mode 100644 index 2ae51be..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/question-mark-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/queue-list.svg b/app/assets/vendor/heroicons/optimized/24/solid/queue-list.svg deleted file mode 100644 index 536fd88..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/queue-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/radio.svg b/app/assets/vendor/heroicons/optimized/24/solid/radio.svg deleted file mode 100644 index 92ca514..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/radio.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/receipt-percent.svg b/app/assets/vendor/heroicons/optimized/24/solid/receipt-percent.svg deleted file mode 100644 index 5eb6371..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/receipt-percent.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/receipt-refund.svg b/app/assets/vendor/heroicons/optimized/24/solid/receipt-refund.svg deleted file mode 100644 index 6a1a154..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/receipt-refund.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/rectangle-group.svg b/app/assets/vendor/heroicons/optimized/24/solid/rectangle-group.svg deleted file mode 100644 index 289d198..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/rectangle-group.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/rectangle-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/rectangle-stack.svg deleted file mode 100644 index 82a1334..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/rectangle-stack.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/rocket-launch.svg b/app/assets/vendor/heroicons/optimized/24/solid/rocket-launch.svg deleted file mode 100644 index 522fc64..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/rocket-launch.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/rss.svg b/app/assets/vendor/heroicons/optimized/24/solid/rss.svg deleted file mode 100644 index b9a8ab2..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/rss.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/scale.svg b/app/assets/vendor/heroicons/optimized/24/solid/scale.svg deleted file mode 100644 index b7e57c7..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/scale.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/scissors.svg b/app/assets/vendor/heroicons/optimized/24/solid/scissors.svg deleted file mode 100644 index 9c971b3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/scissors.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/server-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/server-stack.svg deleted file mode 100644 index c0d3074..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/server-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/server.svg b/app/assets/vendor/heroicons/optimized/24/solid/server.svg deleted file mode 100644 index 55f9aed..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/server.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/share.svg b/app/assets/vendor/heroicons/optimized/24/solid/share.svg deleted file mode 100644 index 8f45dfc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/share.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/shield-check.svg b/app/assets/vendor/heroicons/optimized/24/solid/shield-check.svg deleted file mode 100644 index 2596ace..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/shield-check.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/shield-exclamation.svg b/app/assets/vendor/heroicons/optimized/24/solid/shield-exclamation.svg deleted file mode 100644 index ce53fcc..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/shield-exclamation.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/shopping-bag.svg b/app/assets/vendor/heroicons/optimized/24/solid/shopping-bag.svg deleted file mode 100644 index e6503ee..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/shopping-bag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/shopping-cart.svg b/app/assets/vendor/heroicons/optimized/24/solid/shopping-cart.svg deleted file mode 100644 index 931a12f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/shopping-cart.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/signal-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/signal-slash.svg deleted file mode 100644 index 21c65cb..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/signal-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/signal.svg b/app/assets/vendor/heroicons/optimized/24/solid/signal.svg deleted file mode 100644 index 9027aef..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/signal.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/sparkles.svg b/app/assets/vendor/heroicons/optimized/24/solid/sparkles.svg deleted file mode 100644 index 0d8d0c1..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/sparkles.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/speaker-wave.svg b/app/assets/vendor/heroicons/optimized/24/solid/speaker-wave.svg deleted file mode 100644 index bd84477..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/speaker-wave.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/speaker-x-mark.svg b/app/assets/vendor/heroicons/optimized/24/solid/speaker-x-mark.svg deleted file mode 100644 index e71f1b6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/speaker-x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/square-2-stack.svg b/app/assets/vendor/heroicons/optimized/24/solid/square-2-stack.svg deleted file mode 100644 index c3726a5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/square-2-stack.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/square-3-stack-3d.svg b/app/assets/vendor/heroicons/optimized/24/solid/square-3-stack-3d.svg deleted file mode 100644 index 8ed638d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/square-3-stack-3d.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/squares-2x2.svg b/app/assets/vendor/heroicons/optimized/24/solid/squares-2x2.svg deleted file mode 100644 index 475f6c3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/squares-2x2.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/squares-plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/squares-plus.svg deleted file mode 100644 index 88a2dda..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/squares-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/star.svg b/app/assets/vendor/heroicons/optimized/24/solid/star.svg deleted file mode 100644 index 8509819..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/star.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/stop-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/stop-circle.svg deleted file mode 100644 index 8e57a2c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/stop-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/stop.svg b/app/assets/vendor/heroicons/optimized/24/solid/stop.svg deleted file mode 100644 index 1bf426f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/stop.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/sun.svg b/app/assets/vendor/heroicons/optimized/24/solid/sun.svg deleted file mode 100644 index 1b597fa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/sun.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/swatch.svg b/app/assets/vendor/heroicons/optimized/24/solid/swatch.svg deleted file mode 100644 index 9b26c03..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/swatch.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/table-cells.svg b/app/assets/vendor/heroicons/optimized/24/solid/table-cells.svg deleted file mode 100644 index 151a30c..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/table-cells.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/tag.svg b/app/assets/vendor/heroicons/optimized/24/solid/tag.svg deleted file mode 100644 index efcd01b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/tag.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/ticket.svg b/app/assets/vendor/heroicons/optimized/24/solid/ticket.svg deleted file mode 100644 index e947c41..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/ticket.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/trash.svg b/app/assets/vendor/heroicons/optimized/24/solid/trash.svg deleted file mode 100644 index ed7bf43..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/trash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/trophy.svg b/app/assets/vendor/heroicons/optimized/24/solid/trophy.svg deleted file mode 100644 index ed7ee15..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/trophy.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/truck.svg b/app/assets/vendor/heroicons/optimized/24/solid/truck.svg deleted file mode 100644 index c218da6..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/truck.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/tv.svg b/app/assets/vendor/heroicons/optimized/24/solid/tv.svg deleted file mode 100644 index 8f27026..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/tv.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/user-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/user-circle.svg deleted file mode 100644 index 978d0b8..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/user-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/user-group.svg b/app/assets/vendor/heroicons/optimized/24/solid/user-group.svg deleted file mode 100644 index 7ae7600..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/user-group.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/user-minus.svg b/app/assets/vendor/heroicons/optimized/24/solid/user-minus.svg deleted file mode 100644 index 062a7c9..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/user-minus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/user-plus.svg b/app/assets/vendor/heroicons/optimized/24/solid/user-plus.svg deleted file mode 100644 index ef313fa..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/user-plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/user.svg b/app/assets/vendor/heroicons/optimized/24/solid/user.svg deleted file mode 100644 index 207213d..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/user.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/users.svg b/app/assets/vendor/heroicons/optimized/24/solid/users.svg deleted file mode 100644 index 2959115..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/users.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/variable.svg b/app/assets/vendor/heroicons/optimized/24/solid/variable.svg deleted file mode 100644 index 5601cac..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/variable.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/video-camera-slash.svg b/app/assets/vendor/heroicons/optimized/24/solid/video-camera-slash.svg deleted file mode 100644 index 2a344d5..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/video-camera-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/video-camera.svg b/app/assets/vendor/heroicons/optimized/24/solid/video-camera.svg deleted file mode 100644 index 55bf7b4..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/video-camera.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/view-columns.svg b/app/assets/vendor/heroicons/optimized/24/solid/view-columns.svg deleted file mode 100644 index f7295e3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/view-columns.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/viewfinder-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/viewfinder-circle.svg deleted file mode 100644 index e04b727..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/viewfinder-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/wallet.svg b/app/assets/vendor/heroicons/optimized/24/solid/wallet.svg deleted file mode 100644 index 001b38a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/wallet.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/wifi.svg b/app/assets/vendor/heroicons/optimized/24/solid/wifi.svg deleted file mode 100644 index eb4fd4e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/wifi.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/window.svg b/app/assets/vendor/heroicons/optimized/24/solid/window.svg deleted file mode 100644 index 4de83b3..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/window.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/wrench-screwdriver.svg b/app/assets/vendor/heroicons/optimized/24/solid/wrench-screwdriver.svg deleted file mode 100644 index b7e0e9e..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/wrench-screwdriver.svg +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/wrench.svg b/app/assets/vendor/heroicons/optimized/24/solid/wrench.svg deleted file mode 100644 index 3b61d5b..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/wrench.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/x-circle.svg b/app/assets/vendor/heroicons/optimized/24/solid/x-circle.svg deleted file mode 100644 index 913782a..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/x-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/assets/vendor/heroicons/optimized/24/solid/x-mark.svg b/app/assets/vendor/heroicons/optimized/24/solid/x-mark.svg deleted file mode 100644 index e525a8f..0000000 --- a/app/assets/vendor/heroicons/optimized/24/solid/x-mark.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/config/config.exs b/app/config/config.exs index 23390de..e67f006 100644 --- a/app/config/config.exs +++ b/app/config/config.exs @@ -8,25 +8,19 @@ import Config config :bubbli, - ecto_repos: [Bubbli.Repo] + ecto_repos: [Bubbli.Repo], + generators: [timestamp_type: :utc_datetime] # Configures the endpoint config :bubbli, BubbliWeb.Endpoint, - adapter: Bandit.PhoenixAdapter, url: [host: "localhost"], + adapter: Bandit.PhoenixAdapter, render_errors: [ - formats: [json: BubbliWeb.ErrorJSON], + formats: [html: BubbliWeb.ErrorHTML, json: BubbliWeb.ErrorJSON], layout: false ], pubsub_server: Bubbli.PubSub, - live_view: [signing_salt: "HtOw9bl+"] - -# https://bitwarden.com/help/kdf-algorithms/#argon2id -config :argon2_elixir, - t_cost: 3, - # 64 MiB - m_cost: 16, - parallelism: 4 + live_view: [signing_salt: "QtSvmDtU"] # Configures the mailer # @@ -40,16 +34,17 @@ config :bubbli, Bubbli.Mailer, adapter: Swoosh.Adapters.Local # Configure esbuild (the version is required) config :esbuild, version: "0.17.11", - default: [ - args: ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*), + bubbli: [ + args: + ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*), cd: Path.expand("../assets", __DIR__), env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)} ] # Configure tailwind (the version is required) config :tailwind, - version: "3.2.7", - default: [ + version: "3.4.3", + bubbli: [ args: ~w( --config=tailwind.config.js --input=css/app.css diff --git a/app/config/dev.exs b/app/config/dev.exs index f19a832..8772c2d 100644 --- a/app/config/dev.exs +++ b/app/config/dev.exs @@ -4,7 +4,7 @@ import Config config :bubbli, Bubbli.Repo, username: "postgres", password: "postgres", - hostname: System.get_env("DB_HOST", "localhost"), + hostname: "localhost", database: "bubbli_dev", stacktrace: true, show_sensitive_data_on_connection_error: true, @@ -14,28 +14,21 @@ config :bubbli, Bubbli.Repo, # debugging and code reloading. # # The watchers configuration can be used to run external -# watchers to your application. For example, we use it -# with esbuild to bundle .js and .css sources. +# watchers to your application. For example, we can use it +# to bundle .js and .css sources. config :bubbli, BubbliWeb.Endpoint, # Binding to loopback ipv4 address prevents access from other machines. # Change to `ip: {0, 0, 0, 0}` to allow access from other machines. http: [ip: {127, 0, 0, 1}, port: 4000], check_origin: false, code_reloader: true, - # NOTE(bianchi): forces JSON responses - debug_errors: false, - secret_key_base: "8FqmpKL3ma3jihN2dr90dlvfOQtAFBe3IUikaS4lqz+tIveBcSYGD886z3cygtK2", + debug_errors: true, + secret_key_base: "m3afgW9uhiOTzJg40TNaN3W74ZGQIzvMuxgF/PO/LNlCErZp+I/Sm7wEfwG84fiv", watchers: [ - esbuild: {Esbuild, :install_and_run, [:default, ~w(--sourcemap=inline --watch)]}, - tailwind: {Tailwind, :install_and_run, [:default, ~w(--watch)]} + esbuild: {Esbuild, :install_and_run, [:bubbli, ~w(--sourcemap=inline --watch)]}, + tailwind: {Tailwind, :install_and_run, [:bubbli, ~w(--watch)]} ] -config :bubbli, :signing_salt, "testsigningsalt" - -config :waffle, - storage: Waffle.Storage.Local, - asset_host: "http://static.example.com" - # ## SSL Support # # In order to use HTTPS in development, a self-signed @@ -59,6 +52,16 @@ config :waffle, # configured to run both http and https servers on # different ports. +# Watch static and templates for browser reloading. +config :bubbli, BubbliWeb.Endpoint, + live_reload: [ + patterns: [ + ~r"priv/static/(?!uploads/).*(js|css|png|jpeg|jpg|gif|svg)$", + ~r"priv/gettext/.*(po)$", + ~r"lib/bubbli_web/(controllers|live|components)/.*(ex|heex)$" + ] + ] + # Enable dev routes for dashboard and mailbox config :bubbli, dev_routes: true @@ -72,5 +75,11 @@ config :phoenix, :stacktrace_depth, 20 # Initialize plugs at runtime for faster development compilation config :phoenix, :plug_init_mode, :runtime +config :phoenix_live_view, + # Include HEEx debug annotations as HTML comments in rendered markup + debug_heex_annotations: true, + # Enable helpful, but potentially expensive runtime checks + enable_expensive_runtime_checks: true + # Disable swoosh api client as it is only required for production adapters. config :swoosh, :api_client, false diff --git a/app/config/prod.exs b/app/config/prod.exs index 6982274..fd9d7e9 100644 --- a/app/config/prod.exs +++ b/app/config/prod.exs @@ -1,9 +1,5 @@ import Config -# For production, don't forget to configure the url host -# to something meaningful, Phoenix uses this information -# when generating URLs. - # Note we also include the path to a cache manifest # containing the digested version of static files. This # manifest is generated by the `mix assets.deploy` task, @@ -14,6 +10,9 @@ config :bubbli, BubbliWeb.Endpoint, cache_static_manifest: "priv/static/cache_ma # Configures Swoosh API Client config :swoosh, api_client: Swoosh.ApiClient.Finch, finch_name: Bubbli.Finch +# Disable Swoosh Local Memory Storage +config :swoosh, local: false + # Do not print debug messages in production config :logger, level: :info diff --git a/app/config/runtime.exs b/app/config/runtime.exs index ca37910..263a619 100644 --- a/app/config/runtime.exs +++ b/app/config/runtime.exs @@ -51,12 +51,14 @@ if config_env() == :prod do host = System.get_env("PHX_HOST") || "example.com" port = String.to_integer(System.get_env("PORT") || "4000") + config :bubbli, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY") + config :bubbli, BubbliWeb.Endpoint, url: [host: host, port: 443, scheme: "https"], http: [ # Enable IPv6 and bind on all interfaces. # Set it to {0, 0, 0, 0, 0, 0, 0, 1} for local network only access. - # See the documentation on https://hexdocs.pm/plug_cowboy/Plug.Cowboy.html + # See the documentation on https://hexdocs.pm/bandit/Bandit.html#t:options/0 # for details about using IPv6 vs IPv4 and loopback vs public addresses. ip: {0, 0, 0, 0, 0, 0, 0, 0}, port: port @@ -87,8 +89,8 @@ if config_env() == :prod do # "priv/ssl/server.key". For all supported SSL configuration # options, see https://hexdocs.pm/plug/Plug.SSL.html#configure/1 # - # We also recommend setting `force_ssl` in your endpoint, ensuring - # no data is ever sent via http, always redirecting to https: + # We also recommend setting `force_ssl` in your config/prod.exs, + # ensuring no data is ever sent via http, always redirecting to https: # # config :bubbli, BubbliWeb.Endpoint, # force_ssl: [hsts: true] diff --git a/app/config/test.exs b/app/config/test.exs index 9f9adcc..76ce25f 100644 --- a/app/config/test.exs +++ b/app/config/test.exs @@ -8,28 +8,22 @@ import Config config :bubbli, Bubbli.Repo, username: "postgres", password: "postgres", - hostname: System.get_env("DB_HOST", "localhost"), + hostname: "localhost", database: "bubbli_test#{System.get_env("MIX_TEST_PARTITION")}", pool: Ecto.Adapters.SQL.Sandbox, - pool_size: 10 + pool_size: System.schedulers_online() * 2 # We don't run a server during test. If one is required, # you can enable the server option below. config :bubbli, BubbliWeb.Endpoint, http: [ip: {127, 0, 0, 1}, port: 4002], - secret_key_base: "v4D9SnNezQfft6g8sQLUSeeIL8O+p1oyZ0fMXwtVILoKxJpnc8KJLS4HUVYCLxm7", + secret_key_base: "ZAZ7eik/iwFWx/snXi7U1v9V0M2lNJQft3iB9LliHXwR34G6pBa1FCk+elTzouMw", server: false -config :argon2_elixir, - t_cost: 1, - m_cost: 8 - -config :bubbli, :signing_salt, "testsigningsalt" - -# In test we don't send emails. +# In test we don't send emails config :bubbli, Bubbli.Mailer, adapter: Swoosh.Adapters.Test -# Disable swoosh api client as it is only required for production adapters. +# Disable swoosh api client as it is only required for production adapters config :swoosh, :api_client, false # Print only warnings and errors during test @@ -37,3 +31,7 @@ config :logger, level: :warning # Initialize plugs at runtime for faster test compilation config :phoenix, :plug_init_mode, :runtime + +# Enable helpful, but potentially expensive runtime checks +config :phoenix_live_view, + enable_expensive_runtime_checks: true diff --git a/app/coveralls.json b/app/coveralls.json deleted file mode 100644 index 1cad47a..0000000 --- a/app/coveralls.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "skip_files": [ - "test", - "lib/code_hygiene/application.ex", - "lib/code_hygiene_web.ex", - "lib/code_hygiene_web/router.ex", - "lib/code_hygiene_web/telemetry.ex", - "lib/code_hygiene_web/views/error_helpers.ex" - ], - - "terminal_options": { - "file_column_width": 80 - }, - - "coverage_options": { - "treat_no_relevant_lines_as_covered": true, - "minimum_coverage": 95 - } -} \ No newline at end of file diff --git a/app/lib/bubbli.ex b/app/lib/bubbli.ex index d49b86f..24f8cd7 100644 --- a/app/lib/bubbli.ex +++ b/app/lib/bubbli.ex @@ -6,30 +6,4 @@ defmodule Bubbli do Contexts are also responsible for managing your data, regardless if it comes from the database, an external API or others. """ - use Boundary, deps: [BubbliSchema, Ecto.Repo, Ecto.Query], exports: [Posts] - - alias Bubbli.Accounts - alias Bubbli.EncryptionContexts - - defdelegate list_users(), to: Accounts - defdelegate user_exists?(email), to: Accounts - defdelegate get_user(id, preloads \\ []), to: Accounts - defdelegate get_user!(id, preloads \\ []), to: Accounts - defdelegate get_user_by(query), to: Accounts - defdelegate fetch_user_by_api_token(token), to: Accounts - defdelegate create_user_api_token(user), to: Accounts - defdelegate verify_user(user, password), to: Accounts - defdelegate get_client_key_by_user_and_type(user, type), to: Accounts - defdelegate register_user(attrs), to: Accounts - defdelegate update_user(user, attrs), to: Accounts - defdelegate change_user(user), to: Accounts - defdelegate delete_user(user), to: Accounts - defdelegate change_user(user, attrs), to: Accounts - defdelegate create_client_key(attrs), to: Accounts - - defdelegate get_encryption_keys_by_user(user_id), to: EncryptionContexts - defdelegate get_encryption_key_by_user_and_encryption_context(user_id, encryption_context_id), to: EncryptionContexts - - # TODO: Create new context for user content - # defdelegate get_reactions_by_reactable(reactable_type, reactible_id), to: ??? end diff --git a/app/lib/bubbli/accounts.ex b/app/lib/bubbli/accounts.ex deleted file mode 100644 index 0a42ed3..0000000 --- a/app/lib/bubbli/accounts.ex +++ /dev/null @@ -1,236 +0,0 @@ -defmodule Bubbli.Accounts do - @moduledoc """ - The Account context. - """ - - import Ecto.Query, warn: false - - alias Bubbli.EncryptionContexts - alias Bubbli.Repo - alias Bubbli.Timelines - - # alias Bubbli.Accounts.AuthenticationChallenge - alias BubbliSchema.ClientKey - alias BubbliSchema.User - alias BubbliSchema.UserToken - - @doc """ - Returns the list of users. - - ## Examples - - iex> list_users() - [%User{}, ...] - - """ - def list_users do - Repo.all(User) - end - - def get_user(id, preloads \\ []) do - User - |> Repo.get(id) - |> Repo.preload(preloads) - end - - @doc """ - Gets a single user. - - Raises `Ecto.NoResultsError` if the User does not exist. - - ## Examples - - iex> get_user!(123) - %User{} - - iex> get_user!(456) - ** (Ecto.NoResultsError) - - """ - def get_user!(id, preloads \\ []) do - User - |> Repo.get!(id) - |> Repo.preload(preloads) - end - - @spec get_client_key_by_user_and_type(User.t(), String.t()) :: {:ok, ClientKey.t()} | {:error, :no_key_found} - def get_client_key_by_user_and_type(user, type) do - query = - from(k in ClientKey, - where: k.user_id == ^user.id and k.type == ^type - ) - - case Repo.one(query) do - nil -> - {:error, :no_key_found} - - client_key -> - {:ok, client_key} - end - end - - @spec user_exists?(String.t()) :: boolean() - def user_exists?(email) do - query = from(u in User, where: u.email == ^email) - Repo.exists?(query) - end - - @spec get_user_by(Keyword.t() | map()) :: {:ok, User.t()} | {:error, atom()} - def get_user_by(query) do - case Repo.get_by(User, query) do - nil -> - {:error, :user_not_found} - - %User{} = user -> - user = Repo.preload(user, [:home_timeline, home_timeline: :encryption_context]) - {:ok, user} - - error -> - {:error, error} - end - end - - @spec verify_user(User.t(), String.t()) :: :ok | {:error, :invalid_password} - def verify_user(user, password) do - if User.verify_user(user, password) do - :ok - else - {:error, :invalid_password} - end - end - - @spec register_user(map()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} - def register_user(%{client_keys: client_keys_attrs, timeline_key_map: timeline_key_map} = attrs) do - Repo.transact(fn -> - with {:ok, user} <- create_user(Map.put(attrs, :is_active, true)), - {:ok, _client_keys} <- create_client_keys(client_keys_attrs, user.id), - {:ok, timeline} <- - Timelines.create_timeline(%{type: :user, user_id: user.id}), - {:ok, _encryption_context} <- - EncryptionContexts.register_encryption_context(%{ - protected_encryption_key_map: timeline_key_map, - user_id: user.id, - timeline_id: timeline.id - }) do - # TODO: figure out how to handle preloads - user = Repo.preload(user, [:home_timeline, home_timeline: :encryption_context]) - {:ok, user} - end - end) - end - - # API Tokens - @doc """ - Creates a new api token for a user. - - The token returned must be saved somewhere safe. - This token cannot be recovered from the database. - """ - def create_user_api_token(user) do - {encoded_token, user_token} = UserToken.build_email_token(user, "api-token") - Repo.insert!(user_token) - encoded_token - end - - @doc """ - Fetches the user by API token. - """ - def fetch_user_by_api_token(token) do - with {:ok, query} <- UserToken.verify_email_token_query(token, "api-token"), - %User{} = user <- Repo.one(query) do - user = Repo.preload(user, [:home_timeline, home_timeline: :encryption_context]) - {:ok, user} - else - _ -> :error - end - end - - # Client Keys - - def create_client_keys(attrs_list \\ [], user_id) do - client_key_tuples = - Enum.map(attrs_list, fn attrs -> - create_client_key(Map.put(attrs, :user_id, user_id)) - end) - - if Enum.all?(client_key_tuples, fn - {:ok, _} -> true - _ -> false - end) do - {:ok, Enum.map(client_key_tuples, fn {:ok, client_key} -> client_key end)} - else - {:error, :invalid_client_keys} - end - end - - def create_client_key(attrs \\ %{}) do - %ClientKey{} - |> ClientKey.changeset(attrs) - |> Repo.insert() - end - - @doc """ - Creates a user. - - ## Examples - - iex> create_user(%{field: value}) - {:ok, %User{}} - - iex> create_user(%{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def create_user(attrs \\ %{}) do - %User{} - |> User.changeset(attrs) - |> Repo.insert() - end - - @doc """ - Updates a user. - - ## Examples - - iex> update_user(user, %{field: new_value}) - {:ok, %User{}} - - iex> update_user(user, %{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def update_user(%User{} = user, attrs) do - user - |> User.changeset(attrs) - |> Repo.update() - end - - @doc """ - Deletes a user. - - ## Examples - - iex> delete_user(user) - {:ok, %User{}} - - iex> delete_user(user) - {:error, %Ecto.Changeset{}} - - """ - def delete_user(%User{} = user) do - Repo.delete(user) - end - - @doc """ - Returns an `%Ecto.Changeset{}` for tracking user changes. - - ## Examples - - iex> change_user(user) - %Ecto.Changeset{data: %User{}} - - """ - def change_user(%User{} = user, attrs \\ %{}) do - User.changeset(user, attrs) - end -end diff --git a/app/lib/bubbli/accounts/user_notifier.ex b/app/lib/bubbli/accounts/user_notifier.ex deleted file mode 100644 index 519fb69..0000000 --- a/app/lib/bubbli/accounts/user_notifier.ex +++ /dev/null @@ -1,80 +0,0 @@ -defmodule Bubbli.Accounts.UserNotifier do - @moduledoc false - import Swoosh.Email - - alias Bubbli.Mailer - - # Delivers the email using the application mailer. - defp deliver(recipient, subject, body) do - email = - new() - |> to(recipient) - |> from({"Bubbli", "contact@example.com"}) - |> subject(subject) - |> text_body(body) - - with {:ok, _metadata} <- Mailer.deliver(email) do - {:ok, email} - end - end - - @doc """ - Deliver instructions to confirm account. - """ - def deliver_confirmation_instructions(user, url) do - deliver(user.email, "Confirmation instructions", """ - - ============================== - - Hi #{user.email}, - - You can confirm your account by visiting the URL below: - - #{url} - - If you didn't create an account with us, please ignore this. - - ============================== - """) - end - - # @doc """ - # Deliver instructions to reset a user password. - # """ - # def deliver_reset_password_instructions(user, url) do - # deliver(user.email, "Reset password instructions", """ - - # ============================== - - # Hi #{user.email}, - - # You can reset your password by visiting the URL below: - - # #{url} - - # If you didn't request this change, please ignore this. - - # ============================== - # """) - # end - - @doc """ - Deliver instructions to update a user email. - """ - def deliver_update_email_instructions(user, url) do - deliver(user.email, "Update email instructions", """ - - ============================== - - Hi #{user.email}, - - You can change your email by visiting the URL below: - - #{url} - - If you didn't request this change, please ignore this. - - ============================== - """) - end -end diff --git a/app/lib/bubbli/application.ex b/app/lib/bubbli/application.ex index ff4c83e..51ab198 100644 --- a/app/lib/bubbli/application.ex +++ b/app/lib/bubbli/application.ex @@ -2,24 +2,22 @@ defmodule Bubbli.Application do # See https://hexdocs.pm/elixir/Application.html # for more information on OTP Applications @moduledoc false - use Boundary, top_level?: true, deps: [Bubbli, BubbliWeb] + use Application @impl true def start(_type, _args) do children = [ - # Start the Telemetry supervisor BubbliWeb.Telemetry, - # Start the Ecto repository Bubbli.Repo, - # Start the PubSub system + {DNSCluster, query: Application.get_env(:bubbli, :dns_cluster_query) || :ignore}, {Phoenix.PubSub, name: Bubbli.PubSub}, - # Start Finch + # Start the Finch HTTP client for sending emails {Finch, name: Bubbli.Finch}, - # Start the Endpoint (http/https) - BubbliWeb.Endpoint # Start a worker by calling: Bubbli.Worker.start_link(arg) - # {Bubbli.Worker, arg} + # {Bubbli.Worker, arg}, + # Start to serve requests, typically the last entry + BubbliWeb.Endpoint ] # See https://hexdocs.pm/elixir/Supervisor.html diff --git a/app/lib/bubbli/encryption_contexts.ex b/app/lib/bubbli/encryption_contexts.ex deleted file mode 100644 index ca50d64..0000000 --- a/app/lib/bubbli/encryption_contexts.ex +++ /dev/null @@ -1,144 +0,0 @@ -defmodule Bubbli.EncryptionContexts do - @moduledoc """ - The EncryptionContexts context. - """ - - import Ecto.Query, warn: false - - alias Bubbli.Repo - alias BubbliSchema.EncryptionContext - alias BubbliSchema.EncryptionKey - - @doc """ - Returns the list of encryption_contexts. - - ## Examples - - iex> list_encryption_contexts() - [%encryption_context{}, ...] - - """ - def list_encryption_contexts do - Repo.all(EncryptionContext) - end - - def get_encryption_context(id), do: Repo.get(EncryptionContext, id) - - @doc """ - Gets a single encryption_context. - - Raises `Ecto.NoResultsError` if the encryption_context does not exist. - - ## Examples - - iex> get_encryption_context!(123) - %encryption_context{} - - iex> get_encryption_context!(456) - ** (Ecto.NoResultsError) - - """ - def get_encryption_context!(id), do: Repo.get!(EncryptionContext, id) - - @doc """ - Creates a encryption_context and associated encryption_key. - - ## Examples - - iex> register_encryption_context(%{protected_encryption_key: value}) - {:ok, %encryption_context{}} - - iex> register_encryption_context(%{protected_encryption_key: nil}) - {:error, %Ecto.Changeset{}} - - """ - def register_encryption_context(%{ - protected_encryption_key_map: protected_encryption_key_map, - user_id: user_id, - timeline_id: timeline_id - }) do - Repo.transact(fn -> - with {:ok, encryption_context} <- create_encryption_context(%{timeline_id: timeline_id}), - # TODO: cast_assoc for encryption_key - {:ok, _encryption_key} <- - create_encryption_key(%{ - protected_encryption_key: protected_encryption_key_map.protected_encryption_key, - key_algorithm: protected_encryption_key_map.key_algorithm, - wrap_algorithm: protected_encryption_key_map.wrap_algorithm, - key_usages: protected_encryption_key_map.key_usages, - user_id: user_id, - encryption_context_id: encryption_context.id - }) do - {:ok, encryption_context} - end - end) - end - - defp create_encryption_context(attrs) do - %EncryptionContext{} - |> EncryptionContext.changeset(attrs) - |> Repo.insert() - end - - @doc """ - Updates a encryption_context. - - ## Examples - - iex> update_encryption_context(%encryption_context{}, %{field: value}) - {:ok, %encryption_context{}} - - iex> update_encryption_context(%encryption_context{}, %{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def update_encryption_context(%EncryptionContext{} = encryption_context, attrs) do - encryption_context - |> EncryptionContext.changeset(attrs) - |> Repo.update() - end - - @doc """ - Deletes a encryption_context. - - ## Examples - - iex> delete_encryption_context(%encryption_context{}) - {:ok, %encryption_context{}} - - """ - def delete_encryption_context(%EncryptionContext{} = encryption_context) do - Repo.delete(encryption_context) - end - - def list_encryption_keys do - Repo.all(EncryptionKey) - end - - def get_encryption_key(id), do: Repo.get(EncryptionKey, id) - def get_encryption_key!(id), do: Repo.get!(EncryptionKey, id) - - def get_encryption_keys_by_user(user_id) do - Repo.all(from e in EncryptionKey, where: e.user_id == ^user_id) - end - - def get_encryption_key_by_user_and_encryption_context(user_id, encryption_context_id) do - Repo.get_by(EncryptionKey, user_id: user_id, encryption_context_id: encryption_context_id) - end - - def create_encryption_key(attrs \\ %{}) do - %EncryptionKey{} - |> EncryptionKey.changeset(attrs) - |> Repo.insert() - end - - def update_encryption_key(%EncryptionKey{} = encryption_key, attrs) do - encryption_key - |> EncryptionKey.changeset(attrs) - |> Repo.update() - end - - def delete_encryption_key(%EncryptionKey{} = encryption_key) do - Repo.delete(encryption_key) - end -end diff --git a/app/lib/bubbli/mailer.ex b/app/lib/bubbli/mailer.ex index ae322db..4174eed 100644 --- a/app/lib/bubbli/mailer.ex +++ b/app/lib/bubbli/mailer.ex @@ -1,4 +1,3 @@ defmodule Bubbli.Mailer do - @moduledoc false use Swoosh.Mailer, otp_app: :bubbli end diff --git a/app/lib/bubbli/posts.ex b/app/lib/bubbli/posts.ex deleted file mode 100644 index 10b513e..0000000 --- a/app/lib/bubbli/posts.ex +++ /dev/null @@ -1,141 +0,0 @@ -defmodule Bubbli.Posts do - @moduledoc """ - The Post context. - """ - - import Ecto.Query, warn: false - - alias Bubbli.Repo - alias BubbliSchema.Post - - @doc """ - Returns the list of posts. - - ## Examples - - iex> list_posts() - [%post{}, ...] - - """ - def list_posts do - Repo.all(Post) - end - - def get_posts_for_timeline(timeline_id) do - query = - from(p in Post, - where: p.timeline_id == ^timeline_id - ) - - Repo.all(query) - end - - def get_posts_for_user(user) do - # TODO: replace with flop - query = - from(p in Post, - where: - p.timeline_id in subquery( - from(t in BubbliSchema.Timeline, - where: t.user_id == ^user.id, - select: t.id - ) - ), - # TODO: oy to the vey - preload: [author: [home_timeline: [:encryption_context]], timeline: [:encryption_context]] - ) - - Repo.all(query) - end - - def get_post(id), do: Repo.get(Post, id) - - @doc """ - Gets a single post. - - Raises `Ecto.NoResultsError` if the post does not exist. - - ## Examples - - iex> get_post!(123) - %post{} - - iex> get_post!(456) - ** (Ecto.NoResultsError) - - """ - def get_post!(id), do: Repo.get!(Post, id) - - @doc """ - Creates a post. - - ## Examples - - iex> create_post(%{field: value}) - {:ok, %post{}} - - iex> create_post(%{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def create_post(attrs \\ %{}) do - %Post{} - |> Post.changeset(attrs) - |> Repo.insert() - |> case do - {:ok, post} -> - post = Repo.preload(post, timeline: :encryption_context) - {:ok, post} - - {:error, _} = err -> - err - end - end - - @doc """ - Updates a post. - - ## Examples - - iex> update_post(post, %{field: new_value}) - {:ok, %post{}} - - iex> update_post(post, %{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def update_post(%Post{} = post, attrs) do - post - |> Post.changeset(attrs) - |> Repo.update() - end - - @doc """ - Deletes a post. - - ## Examples - - iex> delete_post(post) - {:ok, %post{}} - - iex> delete_post(post) - {:error, %Ecto.Changeset{}} - - """ - def delete_post(%Post{} = post) do - Repo.delete(post) - end - - @doc """ - Returns an `%Ecto.Changeset{}` for tracking post changes. - - ## Examples - - iex> change_post(post) - %Ecto.Changeset{data: %post{}} - - """ - def change_post(%Post{} = post, attrs \\ %{}) do - Post.changeset(post, attrs) - end -end diff --git a/app/lib/bubbli/release.ex b/app/lib/bubbli/release.ex deleted file mode 100644 index 620411d..0000000 --- a/app/lib/bubbli/release.ex +++ /dev/null @@ -1,28 +0,0 @@ -defmodule Bubbli.Release do - @moduledoc """ - Used for executing DB release tasks when run in production without Mix - installed. - """ - @app :bubbli - - def migrate do - load_app() - - for repo <- repos() do - {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) - end - end - - def rollback(repo, version) do - load_app() - {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) - end - - defp repos do - Application.fetch_env!(@app, :ecto_repos) - end - - defp load_app do - Application.load(@app) - end -end diff --git a/app/lib/bubbli/repo.ex b/app/lib/bubbli/repo.ex index 3c3c603..c5c18ca 100644 --- a/app/lib/bubbli/repo.ex +++ b/app/lib/bubbli/repo.ex @@ -2,19 +2,4 @@ defmodule Bubbli.Repo do use Ecto.Repo, otp_app: :bubbli, adapter: Ecto.Adapters.Postgres - - @spec transact((-> any()), keyword()) :: {:ok, any()} | {:error, any()} - def transact(fun, opts \\ []) do - transaction( - fn -> - case fun.() do - {:ok, value} -> value - :ok -> :transaction_commited - {:error, reason} -> rollback(reason) - :error -> rollback(:transaction_rollback_error) - end - end, - opts - ) - end end diff --git a/app/lib/bubbli/timelines.ex b/app/lib/bubbli/timelines.ex deleted file mode 100644 index 3431b88..0000000 --- a/app/lib/bubbli/timelines.ex +++ /dev/null @@ -1,93 +0,0 @@ -defmodule Bubbli.Timelines do - @moduledoc false - import Ecto.Query, warn: false - - alias Bubbli.Repo - alias BubbliSchema.Timeline - - @doc """ - Returns the list of timelines. - - ## Examples - - iex> list_timelines() - [%Timeline{}, ...] - - """ - @spec list_timelines() :: [Timeline.t()] - def list_timelines do - Repo.all(Timeline) - end - - @doc """ - Gets a single timeline. - - ## Examples - - iex> get_timeline(123) - %Timeline{} - - iex> get_timeline(456) - nil - - """ - @spec get_timeline(binary()) :: Timeline.t() | nil - def get_timeline(id), do: Repo.get(Timeline, id) - @spec get_timeline!(binary()) :: Timeline.t() - def get_timeline!(id), do: Repo.get!(Timeline, id) - - @doc """ - Creates a timeline. - - ## Examples - - iex> create_timeline(%{user_id: value, type: :user, protected_encryption_key: protected_encryption_key}) - {:ok, %Timeline{}} - - iex> create_timeline(%{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - @spec create_timeline(map()) :: {:ok, Timeline.t()} | {:error, Ecto.Changeset.t()} - def create_timeline(attrs \\ %{}) do - %Timeline{} - |> Timeline.changeset(attrs) - |> Repo.insert() - end - - @doc """ - Updates a timeline. - - ## Examples - - iex> update_timeline(timeline, %{visibility: :normal}) - {:ok, %Timeline{}} - - iex> update_timeline(timeline, %{visibility: :bad_value}) - {:error, %Ecto.Changeset{}} - - """ - @spec update_timeline(Timeline.t(), map()) :: {:ok, Timeline.t()} | {:error, Ecto.Changeset.t()} - def update_timeline(timeline, attrs) do - timeline - |> Timeline.changeset(attrs) - |> Repo.update() - end - - @doc """ - Deletes a timeline. - - ## Examples - - iex> delete_timeline(timeline) - {:ok, %Timeline{}} - - iex> delete_timeline(timeline) - {:error, %Ecto.Changeset{}} - - """ - @spec delete_timeline(Timeline.t()) :: {:ok, Timeline.t()} | {:error, Ecto.Changeset.t()} - def delete_timeline(timeline) do - Repo.delete(timeline) - end -end diff --git a/app/lib/bubbli_schema.ex b/app/lib/bubbli_schema.ex deleted file mode 100644 index ae7d88a..0000000 --- a/app/lib/bubbli_schema.ex +++ /dev/null @@ -1,21 +0,0 @@ -defmodule BubbliSchema do - @moduledoc """ - Top level schema module - """ - use Boundary, - deps: [ - Ecto, - Ecto.Changeset, - Ecto.Schema, - Ecto.Query - ], - exports: [ - ClientKey, - EncryptionContext, - EncryptionKey, - Post, - Timeline, - User, - UserToken - ] -end diff --git a/app/lib/bubbli_schema/client_key.ex b/app/lib/bubbli_schema/client_key.ex deleted file mode 100644 index 5c11c3a..0000000 --- a/app/lib/bubbli_schema/client_key.ex +++ /dev/null @@ -1,58 +0,0 @@ -defmodule BubbliSchema.ClientKey do - @moduledoc """ - Schema for the ClientKey model. Client keys are used to encrypt and decrypt - the user's root private key. - """ - use Ecto.Schema - - import Ecto.Changeset - - @required_attrs [ - :type, - :user_id, - :protected_private_key, - :key_algorithm, - :wrap_algorithm, - :key_usages - ] - @optional_attrs [] - @attrs @required_attrs ++ @optional_attrs - - @type t :: %__MODULE__{ - id: binary(), - type: :password | :recovery | :device, - # name: String.t(), - key_algorithm: map(), - wrap_algorithm: map(), - key_usages: list(String.t()), - protected_private_key: String.t(), - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t(), - user: BubbliSchema.User.t() - } - - @primary_key {:id, :binary_id, autogenerate: true} - @foreign_key_type :binary_id - - schema "client_keys" do - field(:type, Ecto.Enum, values: [:password, :recovery, :device]) - # field(:name, :string) - - field(:key_algorithm, :map) - field(:wrap_algorithm, :map) - field(:key_usages, {:array, :string}) - field(:protected_private_key, :string, redact: true) - - timestamps() - - belongs_to(:user, BubbliSchema.User, type: :binary_id, primary_key: true) - end - - @doc false - def changeset(user, attrs) do - user - |> cast(attrs, @attrs) - |> validate_required(@required_attrs) - |> foreign_key_constraint(:user_id) - end -end diff --git a/app/lib/bubbli_schema/encryption_context.ex b/app/lib/bubbli_schema/encryption_context.ex deleted file mode 100644 index 6b7cf0c..0000000 --- a/app/lib/bubbli_schema/encryption_context.ex +++ /dev/null @@ -1,34 +0,0 @@ -defmodule BubbliSchema.EncryptionContext do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - @required_attrs [ - :timeline_id - ] - @optional_attrs [] - @attrs @required_attrs ++ @optional_attrs - - @type t :: %__MODULE__{ - id: binary(), - timeline: BubbliSchema.Timeline.t(), - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t() - } - - @primary_key {:id, :binary_id, autogenerate: true} - - schema "encryption_contexts" do - belongs_to(:timeline, BubbliSchema.Timeline, type: :binary_id, primary_key: true) - has_many(:encryption_keys, BubbliSchema.EncryptionKey, on_delete: :delete_all) - - timestamps() - end - - def changeset(encryption_context, attrs) do - encryption_context - |> cast(attrs, @attrs) - |> validate_required(@required_attrs) - end -end diff --git a/app/lib/bubbli_schema/encryption_key.ex b/app/lib/bubbli_schema/encryption_key.ex deleted file mode 100644 index a5579af..0000000 --- a/app/lib/bubbli_schema/encryption_key.ex +++ /dev/null @@ -1,52 +0,0 @@ -defmodule BubbliSchema.EncryptionKey do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - @required_attrs [ - :user_id, - :encryption_context_id, - :protected_encryption_key, - :key_algorithm, - :wrap_algorithm, - :key_usages - ] - @optional_attrs [] - @attrs @required_attrs ++ @optional_attrs - - @type t :: %__MODULE__{ - id: binary(), - protected_encryption_key: binary(), - key_algorithm: map(), - wrap_algorithm: map(), - key_usages: list(String.t()), - user_id: binary(), - encryption_context_id: binary(), - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t() - } - - @primary_key {:id, :binary_id, autogenerate: true} - @foreign_key_type :binary_id - - schema "encryption_keys" do - field(:protected_encryption_key, :binary) - field(:key_algorithm, :map) - field(:wrap_algorithm, :map) - field(:key_usages, {:array, :string}) - - belongs_to(:encryption_context, BubbliSchema.EncryptionContext, type: :binary_id, primary_key: true) - belongs_to(:user, BubbliSchema.User, type: :binary_id, primary_key: true) - - timestamps() - end - - def changeset(encryption_key, attrs) do - encryption_key - |> cast(attrs, @attrs) - |> validate_required(@required_attrs) - - # TODO: validate key algorithm/wrap algorithm/key usages are actually populated - end -end diff --git a/app/lib/bubbli_schema/post.ex b/app/lib/bubbli_schema/post.ex deleted file mode 100644 index 4017dc2..0000000 --- a/app/lib/bubbli_schema/post.ex +++ /dev/null @@ -1,60 +0,0 @@ -defmodule BubbliSchema.Post do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - @required_attrs [ - :author_id, - :protected_content, - :timeline_id, - :encryption_algorithm - ] - @optional_attrs [] - @attrs @required_attrs ++ @optional_attrs - - @type t :: %__MODULE__{ - id: binary(), - deleted_at: NaiveDateTime.t(), - protected_content: binary(), - encryption_algorithm: map(), - author: BubbliSchema.User.t(), - # comments: [BubbliSchema.Comment.t()], - # attachments: [BubbliSchema.Attachment.t()], - # reactions: [BubbliSchema.Reaction.t()], - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t() - } - - # @derive { - # Flop.Schema, - # filterable: [:author, :timeline], - # sortable: [:inserted_at] - # } - - @primary_key {:id, :binary_id, autogenerate: true} - - schema "posts" do - field(:deleted_at, :utc_datetime) - field(:protected_content, :binary) - field(:encryption_algorithm, :map) - # TODO: migrate encrypted content to remote storage + store references - - timestamps() - - belongs_to(:author, BubbliSchema.User, type: :binary_id, primary_key: true) - belongs_to(:timeline, BubbliSchema.Timeline, type: :binary_id, primary_key: true) - # has_many(:comments, BubbliSchema.Comment, on_delete: :delete_all) - # has_many(:attachments, BubbliSchema.Attachment, on_delete: :delete_all) - # many_to_many(:keywords, BubbliSchema.Keyword, join_through: "posts_keywords") - end - - def changeset(post, attrs) do - post - |> cast(attrs, @attrs) - |> validate_required(@required_attrs) - # TODO: validate encryption algorithm is actually populated - |> foreign_key_constraint(:author_id) - |> foreign_key_constraint(:timeline_id) - end -end diff --git a/app/lib/bubbli_schema/timeline.ex b/app/lib/bubbli_schema/timeline.ex deleted file mode 100644 index 9f13842..0000000 --- a/app/lib/bubbli_schema/timeline.ex +++ /dev/null @@ -1,48 +0,0 @@ -defmodule BubbliSchema.Timeline do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - @required_attrs [ - :type, - :user_id - # :group_id - ] - @optional_attrs [] - @attrs @required_attrs ++ @optional_attrs - - @type t :: %__MODULE__{ - id: binary(), - type: Enum.t(), - user: BubbliSchema.User.t(), - # group_id: binary(), - encryption_context: BubbliSchema.EncryptionContext.t(), - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t() - } - - @primary_key {:id, :binary_id, autogenerate: true} - @foreign_key_type :binary_id - - schema "timelines" do - field(:type, Ecto.Enum, values: [:user, :group]) - belongs_to(:user, BubbliSchema.User, type: :binary_id, primary_key: true, foreign_key: :user_id) - # belongs_to(:group, BubbliSchema.Group, type: :binary_id, primary_key: true, foreign_key: :group_id) - - has_one(:encryption_context, BubbliSchema.EncryptionContext, on_delete: :delete_all) - - timestamps() - end - - def changeset(timeline, attrs) do - timeline - # , :group_id]) - |> cast(attrs, @attrs) - # , :group_id] - |> validate_required(@required_attrs) - - # TODO: validate that only one of user_id or group_id is present - # TODO: validate one of user_id or group_id is present - end -end diff --git a/app/lib/bubbli_schema/user.ex b/app/lib/bubbli_schema/user.ex deleted file mode 100644 index 8d86158..0000000 --- a/app/lib/bubbli_schema/user.ex +++ /dev/null @@ -1,123 +0,0 @@ -defmodule BubbliSchema.User do - @moduledoc """ - Schema for the User model - """ - use Ecto.Schema - - import Ecto.Changeset - - @type t :: %__MODULE__{ - id: binary(), - email: String.t(), - is_active: boolean(), - display_name: String.t(), - username: String.t(), - master_public_key: String.t(), - root_password_hash: String.t(), - inserted_at: NaiveDateTime.t(), - updated_at: NaiveDateTime.t(), - client_keys: [BubbliSchema.ClientKey.t()] - } - - @primary_key {:id, :binary_id, autogenerate: true} - # TODO: figure out if this should live in the user view - # @public_fields [ - # :email, - # :is_active, - # :display_name, - # :username, - # :home_timeline_id - # ] - - # def serialize_for_api(user) do - # user = %{user | home_timeline_id: user.home_timeline.id} - # Enum.reduce(Map.from_struct(user), %{}, fn - # {_, %Ecto.Association.NotLoaded{}}, acc -> acc - # {k, v}, acc when k in @public_fields -> Map.put(acc, k, v) - # {_, _}, acc -> acc - # end) - # end - - def verify_user(user, password) do - Argon2.verify_pass(password, user.root_password_hash) - end - - schema "users" do - field(:email, :string) - field(:is_active, :boolean, default: false) - - # cryptography - # PEM encoded - field(:master_public_key, :string) - field(:root_password_hash, :binary) - - # user attributes - field(:display_name, :string) - field(:username, :string) - field(:home_timeline_id, :binary, virtual: true) - - timestamps() - - has_many(:client_keys, BubbliSchema.ClientKey) - has_many(:timelines, BubbliSchema.Timeline) - has_one(:home_timeline, BubbliSchema.Timeline, where: [type: :user]) - end - - @doc false - def changeset(user, attrs, opts \\ []) do - user - |> cast(attrs, [ - :email, - :is_active, - :display_name, - :master_public_key, - :root_password_hash, - :username - ]) - # TODO: cast assoc for client_keys - |> validate_required([ - :is_active, - :display_name, - :username, - :master_public_key - ]) - |> validate_email(opts) - |> validate_root_password_hash(opts) - end - - defp validate_email(changeset, opts) do - changeset - |> validate_required([:email]) - |> validate_format(:email, ~r/^[^\s]+@[^\s]+$/, message: "must have the @ sign and no spaces") - |> validate_length(:email, max: 160) - |> maybe_validate_unique_email(opts) - end - - defp validate_root_password_hash(changeset, _opts) do - changeset - |> validate_required([:root_password_hash]) - # TODO: validate byte length - # |> validate_length(:password, min: 12, max: 72) - |> put_pass_hash() - end - - defp maybe_validate_unique_email(changeset, opts) do - if Keyword.get(opts, :validate_email, true) do - changeset - |> unsafe_validate_unique(:email, Bubbli.Repo) - |> unique_constraint(:email) - else - changeset - end - end - - # this mimics bitwardens server-side password hashing model - # ref: https://bitwarden.com/images/resources/security-white-paper-download.pdf - # hashing defaults: https://bitwarden.com/help/kdf-algorithms/#argon2id - defp put_pass_hash(%Ecto.Changeset{valid?: true, changes: %{root_password_hash: password_hash}} = changeset) do - # TODO: ensure the right opts are used - change(changeset, %{root_password_hash: Argon2.hash_pwd_salt(password_hash)}) - end - - defp put_pass_hash(changeset), do: changeset -end diff --git a/app/lib/bubbli_schema/user_token.ex b/app/lib/bubbli_schema/user_token.ex deleted file mode 100644 index 8a84789..0000000 --- a/app/lib/bubbli_schema/user_token.ex +++ /dev/null @@ -1,186 +0,0 @@ -defmodule BubbliSchema.UserToken do - @moduledoc false - use Ecto.Schema - - import Ecto.Query - - alias BubbliSchema.UserToken - - @hash_algorithm :sha256 - @rand_size 32 - - # It is very important to keep the reset password token expiry short, - # since someone with access to the email may take over the account. - @reset_password_validity_in_days 1 - @confirm_validity_in_days 7 - @api_token_validity_in_days 30 - @change_email_validity_in_days 7 - @session_validity_in_days 60 - - @primary_key {:id, :binary_id, autogenerate: true} - @foreign_key_type :binary_id - schema "users_tokens" do - field :token, :binary - field :context, :string - field :sent_to, :string - belongs_to :user, BubbliSchema.User - - timestamps(updated_at: false) - end - - @doc """ - Generates a token that will be stored in a signed place, - such as session or cookie. As they are signed, those - tokens do not need to be hashed. - - The reason why we store session tokens in the database, even - though Phoenix already provides a session cookie, is because - Phoenix' default session cookies are not persisted, they are - simply signed and potentially encrypted. This means they are - valid indefinitely, unless you change the signing/encryption - salt. - - Therefore, storing them allows individual user - sessions to be expired. The token system can also be extended - to store additional data, such as the device used for logging in. - You could then use this information to display all valid sessions - and devices in the UI and allow users to explicitly expire any - session they deem invalid. - """ - def build_session_token(user) do - token = :crypto.strong_rand_bytes(@rand_size) - {token, %UserToken{token: token, context: "session", user_id: user.id}} - end - - @doc """ - Checks if the token is valid and returns its underlying lookup query. - - The query returns the user found by the token, if any. - - The token is valid if it matches the value in the database and it has - not expired (after @session_validity_in_days). - """ - def verify_session_token_query(token) do - query = - from token in by_token_and_context_query(token, "session"), - join: user in assoc(token, :user), - where: token.inserted_at > ago(@session_validity_in_days, "day"), - select: user - - {:ok, query} - end - - @doc """ - Builds a token and its hash to be delivered to the user's email. - - The non-hashed token is sent to the user email while the - hashed part is stored in the database. The original token cannot be reconstructed, - which means anyone with read-only access to the database cannot directly use - the token in the application to gain access. Furthermore, if the user changes - their email in the system, the tokens sent to the previous email are no longer - valid. - - Users can easily adapt the existing code to provide other types of delivery methods, - for example, by phone numbers. - """ - def build_email_token(user, context) do - build_hashed_token(user, context, user.email) - end - - defp build_hashed_token(user, context, sent_to) do - token = :crypto.strong_rand_bytes(@rand_size) - hashed_token = :crypto.hash(@hash_algorithm, token) - - {Base.url_encode64(token, padding: false), - %UserToken{ - token: hashed_token, - context: context, - sent_to: sent_to, - user_id: user.id - }} - end - - @doc """ - Checks if the token is valid and returns its underlying lookup query. - - The query returns the user found by the token, if any. - - The given token is valid if it matches its hashed counterpart in the - database and the user email has not changed. This function also checks - if the token is being used within a certain period, depending on the - context. The default contexts supported by this function are either - "confirm", for account confirmation emails, and "reset_password", - for resetting the password. For verifying requests to change the email, - see `verify_change_email_token_query/2`. - """ - def verify_email_token_query(token, context) do - case Base.url_decode64(token, padding: false) do - {:ok, decoded_token} -> - hashed_token = :crypto.hash(@hash_algorithm, decoded_token) - days = days_for_context(context) - - query = - from token in by_token_and_context_query(hashed_token, context), - join: user in assoc(token, :user), - where: token.inserted_at > ago(^days, "day") and token.sent_to == user.email, - select: user - - {:ok, query} - - :error -> - :error - end - end - - defp days_for_context("api-token"), do: @api_token_validity_in_days - defp days_for_context("confirm"), do: @confirm_validity_in_days - defp days_for_context("reset_password"), do: @reset_password_validity_in_days - - @doc """ - Checks if the token is valid and returns its underlying lookup query. - - The query returns the user found by the token, if any. - - This is used to validate requests to change the user - email. It is different from `verify_email_token_query/2` precisely because - `verify_email_token_query/2` validates the email has not changed, which is - the starting point by this function. - - The given token is valid if it matches its hashed counterpart in the - database and if it has not expired (after @change_email_validity_in_days). - The context must always start with "change:". - """ - def verify_change_email_token_query(token, "change:" <> _ = context) do - case Base.url_decode64(token, padding: false) do - {:ok, decoded_token} -> - hashed_token = :crypto.hash(@hash_algorithm, decoded_token) - - query = - from token in by_token_and_context_query(hashed_token, context), - where: token.inserted_at > ago(@change_email_validity_in_days, "day") - - {:ok, query} - - :error -> - :error - end - end - - @doc """ - Returns the token struct for the given token value and context. - """ - def by_token_and_context_query(token, context) do - from UserToken, where: [token: ^token, context: ^context] - end - - @doc """ - Gets all tokens for the given user for the given contexts. - """ - def by_user_and_contexts_query(user, :all) do - from t in UserToken, where: t.user_id == ^user.id - end - - def by_user_and_contexts_query(user, [_ | _] = contexts) do - from t in UserToken, where: t.user_id == ^user.id and t.context in ^contexts - end -end diff --git a/app/lib/bubbli_web.ex b/app/lib/bubbli_web.ex index ffadbf7..643ab86 100644 --- a/app/lib/bubbli_web.ex +++ b/app/lib/bubbli_web.ex @@ -16,9 +16,6 @@ defmodule BubbliWeb do below. Instead, define additional modules and import those modules here. """ - use Boundary, - deps: [Bubbli, BubbliSchema, Phoenix, Ecto.Changeset, Ecto.Schema, Ecto.Query, Ecto.Type], - exports: [Endpoint] def static_paths, do: ~w(assets fonts images favicon.ico robots.txt) @@ -26,10 +23,10 @@ defmodule BubbliWeb do quote do use Phoenix.Router, helpers: false - import Phoenix.Controller - # Import common connection and controller functions to use in pipelines import Plug.Conn + import Phoenix.Controller + import Phoenix.LiveView.Router end end @@ -45,9 +42,55 @@ defmodule BubbliWeb do formats: [:html, :json], layouts: [html: BubbliWeb.Layouts] - import BubbliWeb.Gettext import Plug.Conn + import BubbliWeb.Gettext + + unquote(verified_routes()) + end + end + + def live_view do + quote do + use Phoenix.LiveView, + layout: {BubbliWeb.Layouts, :app} + + unquote(html_helpers()) + end + end + + def live_component do + quote do + use Phoenix.LiveComponent + + unquote(html_helpers()) + end + end + + def html do + quote do + use Phoenix.Component + + # Import convenience functions from controllers + import Phoenix.Controller, + only: [get_csrf_token: 0, view_module: 1, view_template: 1] + + # Include general helpers for rendering HTML + unquote(html_helpers()) + end + end + + defp html_helpers do + quote do + # HTML escaping functionality + import Phoenix.HTML + # Core UI components and translation + import BubbliWeb.CoreComponents + import BubbliWeb.Gettext + + # Shortcut for generating JS commands + alias Phoenix.LiveView.JS + # Routes generation with the ~p sigil unquote(verified_routes()) end end @@ -62,7 +105,7 @@ defmodule BubbliWeb do end @doc """ - When used, dispatch to the appropriate controller/view/etc. + When used, dispatch to the appropriate controller/live_view/etc. """ defmacro __using__(which) when is_atom(which) do apply(__MODULE__, which, []) diff --git a/app/lib/bubbli_web/auth.ex b/app/lib/bubbli_web/auth.ex deleted file mode 100644 index 8faac40..0000000 --- a/app/lib/bubbli_web/auth.ex +++ /dev/null @@ -1,44 +0,0 @@ -defmodule BubbliWeb.Plug.Auth do - @moduledoc false - # import Plug.Conn - - require Logger - - def init(opts) do - opts - end - - def call(conn, opts) do - BubbliWeb.UserAuth.fetch_api_user(conn, opts) - end - - # DEPRECATED in favor of user_auth.ex - # def call(conn, _opts) do - # with {:ok, token} <- get_auth_token(conn), - # {:ok, data} <- BubbliWeb.Token.verify(token) do - # assign(conn, :current_user, Bubbli.get_user(data.user_id)) - # else - # {:error, error} -> - # Logger.info("Error authenticating request, #{error}") - - # conn - # |> put_status(:unauthorized) - # |> Phoenix.Controller.put_view(BubbliWeb.ErrorJSON) - # |> Phoenix.Controller.render(:"401") - # |> halt() - # end - # end - - # def get_auth_token(conn) do - # case get_req_header(conn, "authorization") do - # ["Bearer" <> token] -> - # {:ok, token} - - # _ -> - # case Map.fetch(conn.req_cookies, "authorization") do - # {:ok, token} -> {:ok, token} - # _ -> {:error, :notfound} - # end - # end - # end -end diff --git a/app/lib/bubbli_web/components/core_components.ex b/app/lib/bubbli_web/components/core_components.ex new file mode 100644 index 0000000..a06ecde --- /dev/null +++ b/app/lib/bubbli_web/components/core_components.ex @@ -0,0 +1,676 @@ +defmodule BubbliWeb.CoreComponents do + @moduledoc """ + Provides core UI components. + + At first glance, this module may seem daunting, but its goal is to provide + core building blocks for your application, such as modals, tables, and + forms. The components consist mostly of markup and are well-documented + with doc strings and declarative assigns. You may customize and style + them in any way you want, based on your application growth and needs. + + The default components use Tailwind CSS, a utility-first CSS framework. + See the [Tailwind CSS documentation](https://tailwindcss.com) to learn + how to customize them or feel free to swap in another framework altogether. + + Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. + """ + use Phoenix.Component + + alias Phoenix.LiveView.JS + import BubbliWeb.Gettext + + @doc """ + Renders a modal. + + ## Examples + + <.modal id="confirm-modal"> + This is a modal. + + + JS commands may be passed to the `:on_cancel` to configure + the closing/cancel event, for example: + + <.modal id="confirm" on_cancel={JS.navigate(~p"/posts")}> + This is another modal. + + + """ + attr :id, :string, required: true + attr :show, :boolean, default: false + attr :on_cancel, JS, default: %JS{} + slot :inner_block, required: true + + def modal(assigns) do + ~H""" + + """ + end + + def input(%{type: "select"} = assigns) do + ~H""" +
+ <.label for={@id}><%= @label %> + + <.error :for={msg <- @errors}><%= msg %> +
+ """ + end + + def input(%{type: "textarea"} = assigns) do + ~H""" +
+ <.label for={@id}><%= @label %> + + <.error :for={msg <- @errors}><%= msg %> +
+ """ + end + + # All other inputs text, datetime-local, url, password, etc. are handled here... + def input(assigns) do + ~H""" +
+ <.label for={@id}><%= @label %> + + <.error :for={msg <- @errors}><%= msg %> +
+ """ + end + + @doc """ + Renders a label. + """ + attr :for, :string, default: nil + slot :inner_block, required: true + + def label(assigns) do + ~H""" + + """ + end + + @doc """ + Generates a generic error message. + """ + slot :inner_block, required: true + + def error(assigns) do + ~H""" +

+ <.icon name="hero-exclamation-circle-mini" class="mt-0.5 h-5 w-5 flex-none" /> + <%= render_slot(@inner_block) %> +

+ """ + end + + @doc """ + Renders a header with title. + """ + attr :class, :string, default: nil + + slot :inner_block, required: true + slot :subtitle + slot :actions + + def header(assigns) do + ~H""" +
+
+

+ <%= render_slot(@inner_block) %> +

+

+ <%= render_slot(@subtitle) %> +

+
+
<%= render_slot(@actions) %>
+
+ """ + end + + @doc ~S""" + Renders a table with generic styling. + + ## Examples + + <.table id="users" rows={@users}> + <:col :let={user} label="id"><%= user.id %> + <:col :let={user} label="username"><%= user.username %> + + """ + attr :id, :string, required: true + attr :rows, :list, required: true + attr :row_id, :any, default: nil, doc: "the function for generating the row id" + attr :row_click, :any, default: nil, doc: "the function for handling phx-click on each row" + + attr :row_item, :any, + default: &Function.identity/1, + doc: "the function for mapping each row before calling the :col and :action slots" + + slot :col, required: true do + attr :label, :string + end + + slot :action, doc: "the slot for showing user actions in the last table column" + + def table(assigns) do + assigns = + with %{rows: %Phoenix.LiveView.LiveStream{}} <- assigns do + assign(assigns, row_id: assigns.row_id || fn {id, _item} -> id end) + end + + ~H""" +
+ + + + + + + + + + + + + +
<%= col[:label] %> + <%= gettext("Actions") %> +
+
+ + + <%= render_slot(col, @row_item.(row)) %> + +
+
+
+ + + <%= render_slot(action, @row_item.(row)) %> + +
+
+
+ """ + end + + @doc """ + Renders a data list. + + ## Examples + + <.list> + <:item title="Title"><%= @post.title %> + <:item title="Views"><%= @post.views %> + + """ + slot :item, required: true do + attr :title, :string, required: true + end + + def list(assigns) do + ~H""" +
+
+
+
<%= item.title %>
+
<%= render_slot(item) %>
+
+
+
+ """ + end + + @doc """ + Renders a back navigation link. + + ## Examples + + <.back navigate={~p"/posts"}>Back to posts + """ + attr :navigate, :any, required: true + slot :inner_block, required: true + + def back(assigns) do + ~H""" +
+ <.link + navigate={@navigate} + class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" + > + <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> + <%= render_slot(@inner_block) %> + +
+ """ + end + + @doc """ + Renders a [Heroicon](https://heroicons.com). + + Heroicons come in three styles – outline, solid, and mini. + By default, the outline style is used, but solid and mini may + be applied by using the `-solid` and `-mini` suffix. + + You can customize the size and colors of the icons by setting + width, height, and background color classes. + + Icons are extracted from the `deps/heroicons` directory and bundled within + your compiled app.css by the plugin in your `assets/tailwind.config.js`. + + ## Examples + + <.icon name="hero-x-mark-solid" /> + <.icon name="hero-arrow-path" class="ml-1 w-3 h-3 animate-spin" /> + """ + attr :name, :string, required: true + attr :class, :string, default: nil + + def icon(%{name: "hero-" <> _} = assigns) do + ~H""" + + """ + end + + ## JS Commands + + def show(js \\ %JS{}, selector) do + JS.show(js, + to: selector, + time: 300, + transition: + {"transition-all transform ease-out duration-300", + "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95", + "opacity-100 translate-y-0 sm:scale-100"} + ) + end + + def hide(js \\ %JS{}, selector) do + JS.hide(js, + to: selector, + time: 200, + transition: + {"transition-all transform ease-in duration-200", + "opacity-100 translate-y-0 sm:scale-100", + "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"} + ) + end + + def show_modal(js \\ %JS{}, id) when is_binary(id) do + js + |> JS.show(to: "##{id}") + |> JS.show( + to: "##{id}-bg", + time: 300, + transition: {"transition-all transform ease-out duration-300", "opacity-0", "opacity-100"} + ) + |> show("##{id}-container") + |> JS.add_class("overflow-hidden", to: "body") + |> JS.focus_first(to: "##{id}-content") + end + + def hide_modal(js \\ %JS{}, id) do + js + |> JS.hide( + to: "##{id}-bg", + transition: {"transition-all transform ease-in duration-200", "opacity-100", "opacity-0"} + ) + |> hide("##{id}-container") + |> JS.hide(to: "##{id}", transition: {"block", "block", "hidden"}) + |> JS.remove_class("overflow-hidden", to: "body") + |> JS.pop_focus() + end + + @doc """ + Translates an error message using gettext. + """ + def translate_error({msg, opts}) do + # When using gettext, we typically pass the strings we want + # to translate as a static argument: + # + # # Translate the number of files with plural rules + # dngettext("errors", "1 file", "%{count} files", count) + # + # However the error messages in our forms and APIs are generated + # dynamically, so we need to translate them by calling Gettext + # with our gettext backend as first argument. Translations are + # available in the errors.po file (as we use the "errors" domain). + if count = opts[:count] do + Gettext.dngettext(BubbliWeb.Gettext, "errors", msg, msg, count, opts) + else + Gettext.dgettext(BubbliWeb.Gettext, "errors", msg, opts) + end + end + + @doc """ + Translates the errors for a field from a keyword list of errors. + """ + def translate_errors(errors, field) when is_list(errors) do + for {^field, {msg, opts}} <- errors, do: translate_error({msg, opts}) + end +end diff --git a/app/lib/bubbli_web/components/layouts.ex b/app/lib/bubbli_web/components/layouts.ex new file mode 100644 index 0000000..6e4096b --- /dev/null +++ b/app/lib/bubbli_web/components/layouts.ex @@ -0,0 +1,14 @@ +defmodule BubbliWeb.Layouts do + @moduledoc """ + This module holds different layouts used by your application. + + See the `layouts` directory for all templates available. + The "root" layout is a skeleton rendered as part of the + application router. The "app" layout is set as the default + layout on both `use BubbliWeb, :controller` and + `use BubbliWeb, :live_view`. + """ + use BubbliWeb, :html + + embed_templates "layouts/*" +end diff --git a/app/lib/bubbli_web/components/layouts/app.html.heex b/app/lib/bubbli_web/components/layouts/app.html.heex new file mode 100644 index 0000000..e23bfc8 --- /dev/null +++ b/app/lib/bubbli_web/components/layouts/app.html.heex @@ -0,0 +1,32 @@ +
+
+
+ + + +

+ v<%= Application.spec(:phoenix, :vsn) %> +

+
+ +
+
+
+
+ <.flash_group flash={@flash} /> + <%= @inner_content %> +
+
diff --git a/app/lib/bubbli_web/components/layouts/root.html.heex b/app/lib/bubbli_web/components/layouts/root.html.heex new file mode 100644 index 0000000..33affc4 --- /dev/null +++ b/app/lib/bubbli_web/components/layouts/root.html.heex @@ -0,0 +1,17 @@ + + + + + + + <.live_title suffix=" · Phoenix Framework"> + <%= assigns[:page_title] || "Bubbli" %> + + + + + + <%= @inner_content %> + + diff --git a/app/lib/bubbli_web/controllers/authentication_controller.ex b/app/lib/bubbli_web/controllers/authentication_controller.ex deleted file mode 100644 index ea4cc4b..0000000 --- a/app/lib/bubbli_web/controllers/authentication_controller.ex +++ /dev/null @@ -1,72 +0,0 @@ -defmodule BubbliWeb.AuthenticationController do - use BubbliWeb, :controller - - import Ecto.Changeset - - alias BubbliWeb.Base64EncodedBinary - - require Logger - - action_fallback(BubbliWeb.FallbackController) - - def login(conn, params) do - types = %{ - email: :string, - client_key_type: :string, - root_password_hash: Base64EncodedBinary - } - - {%{}, types} - |> cast(params, Map.keys(types)) - |> validate_required(~w/email client_key_type root_password_hash/a) - |> apply_action(:insert) - |> case do - {:ok, normalized_input} -> - with {:ok, user} <- Bubbli.get_user_by(email: normalized_input.email), - :ok <- Bubbli.verify_user(user, normalized_input.root_password_hash), - {:ok, client_key} <- Bubbli.get_client_key_by_user_and_type(user, normalized_input.client_key_type) do - encryption_keys = Bubbli.get_encryption_keys_by_user(user.id) - token = Bubbli.create_user_api_token(user) - - conn - |> put_status(:ok) - |> Plug.Conn.put_resp_cookie("authorization", token, - http_only: true, - same_site: "Strict", - secure: true, - max_age: 60 * 60 * 24 - ) - |> render( - :successfully_authenticated, - %{user: user, client_key: client_key, encryption_keys: encryption_keys} - ) - else - {:error, :user_not_found} -> - conn |> put_status(404) |> render(:failed_login, error: :user_not_found) - - {:error, error} -> - Logger.warning("failed login - #{inspect(error)}") - conn |> put_status(400) |> render(:failed_login, error: :unknown) - end - - {:error, changeset} -> - conn - |> put_status(400) - |> put_view(json: BubbliWeb.ErrorJSON) - |> render(:"400", changeset: changeset) - end - end - - # def logout(conn, _) do - # conn - # |> put_status(:ok) - # |> BubbliWeb.UserAuth.log_out_user() - # # |> put_resp_cookie("authorization", "", - # # http_only: true, - # # same_site: "Strict", - # # secure: true, - # # max_age: 0 - # # ) - # |> render(:logout) - # end -end diff --git a/app/lib/bubbli_web/controllers/authentication_json.ex b/app/lib/bubbli_web/controllers/authentication_json.ex deleted file mode 100644 index a51d07a..0000000 --- a/app/lib/bubbli_web/controllers/authentication_json.ex +++ /dev/null @@ -1,37 +0,0 @@ -defmodule BubbliWeb.AuthenticationJSON do - def start(%{challenge: challenge}) do - %{challenge: challenge.challenge_string} - end - - def logout(_) do - %{ - success: true - } - end - - # def user_found(%{user: user}) do - # %{ - # success: true, - # user: BubbliWeb.UserView.render("user.json", %{user: user}) - # } - # end - - def failed_login(%{error: error}) do - %{ - success: false, - errors: [error] - } - end - - def successfully_authenticated(%{user: user, client_key: client_key, encryption_keys: keys}) do - # TODO: need to return the home timeline + the timeline's encryption key here - # OR actually, maybe that just happens on dashboard load... Nah, I think the user - # should immediately have the details necessary to post - %{ - success: true, - user: BubbliWeb.UserView.render("user.json", %{user: user}), - encryption_keys: Enum.map(keys, &BubbliWeb.EncryptionKeyView.render("key.json", %{encryption_key: &1})), - client_key: BubbliWeb.ClientKeyView.render("key.json", %{client_key: client_key}) - } - end -end diff --git a/app/lib/bubbli_web/controllers/changeset_json.ex b/app/lib/bubbli_web/controllers/changeset_json.ex deleted file mode 100644 index 3b8c29d..0000000 --- a/app/lib/bubbli_web/controllers/changeset_json.ex +++ /dev/null @@ -1,25 +0,0 @@ -defmodule BubbliWeb.ChangesetJSON do - @doc """ - Renders changeset errors. - """ - def error(%{changeset: changeset}) do - # When encoded, the changeset returns its errors - # as a JSON object. So we just pass it forward. - %{errors: Ecto.Changeset.traverse_errors(changeset, &translate_error/1)} - end - - defp translate_error({msg, opts}) do - # You can make use of gettext to translate error messages by - # uncommenting and adjusting the following code: - - # if count = opts[:count] do - # Gettext.dngettext(BubbliWeb.Gettext, "errors", msg, msg, count, opts) - # else - # Gettext.dgettext(BubbliWeb.Gettext, "errors", msg, opts) - # end - - Enum.reduce(opts, msg, fn {key, value}, acc -> - String.replace(acc, "%{#{key}}", fn _ -> to_string(value) end) - end) - end -end diff --git a/app/lib/bubbli_web/controllers/error_html.ex b/app/lib/bubbli_web/controllers/error_html.ex new file mode 100644 index 0000000..c507fe2 --- /dev/null +++ b/app/lib/bubbli_web/controllers/error_html.ex @@ -0,0 +1,24 @@ +defmodule BubbliWeb.ErrorHTML do + @moduledoc """ + This module is invoked by your endpoint in case of errors on HTML requests. + + See config/config.exs. + """ + use BubbliWeb, :html + + # If you want to customize your error pages, + # uncomment the embed_templates/1 call below + # and add pages to the error directory: + # + # * lib/bubbli_web/controllers/error_html/404.html.heex + # * lib/bubbli_web/controllers/error_html/500.html.heex + # + # embed_templates "error_html/*" + + # The default is to render a plain text page based on + # the template name. For example, "404.html" becomes + # "Not Found". + def render(template, _assigns) do + Phoenix.Controller.status_message_from_template(template) + end +end diff --git a/app/lib/bubbli_web/controllers/error_json.ex b/app/lib/bubbli_web/controllers/error_json.ex index 1c343da..5c024f1 100644 --- a/app/lib/bubbli_web/controllers/error_json.ex +++ b/app/lib/bubbli_web/controllers/error_json.ex @@ -1,20 +1,21 @@ defmodule BubbliWeb.ErrorJSON do + @moduledoc """ + This module is invoked by your endpoint in case of errors on JSON requests. + + See config/config.exs. + """ + # If you want to customize a particular status code, # you may add your own clauses, such as: # # def render("500.json", _assigns) do - # %{errors: %{message: "Internal Server Error"}} + # %{errors: %{detail: "Internal Server Error"}} # end # By default, Phoenix returns the status message from # the template name. For example, "404.json" becomes # "Not Found". - - def render("401.json", _assigns) do - %{errors: %{message: "unauthorized"}} - end - def render(template, _assigns) do - %{errors: %{message: Phoenix.Controller.status_message_from_template(template)}} + %{errors: %{detail: Phoenix.Controller.status_message_from_template(template)}} end end diff --git a/app/lib/bubbli_web/controllers/fallback_controller.ex b/app/lib/bubbli_web/controllers/fallback_controller.ex deleted file mode 100644 index 7057867..0000000 --- a/app/lib/bubbli_web/controllers/fallback_controller.ex +++ /dev/null @@ -1,31 +0,0 @@ -defmodule BubbliWeb.FallbackController do - @moduledoc """ - Translates controller action results into valid `Plug.Conn` responses. - - See `Phoenix.Controller.action_fallback/1` for more details. - """ - use BubbliWeb, :controller - - # This clause handles errors returned by Ecto's insert/update/delete. - def call(conn, {:error, %Ecto.Changeset{} = changeset}) do - conn - |> put_status(:bad_request) - |> put_view(json: BubbliWeb.ChangesetJSON) - |> render(:error, changeset: changeset) - end - - # This clause is an example of how to handle resources that cannot be found. - def call(conn, {:error, :not_found}) do - conn - |> put_status(:not_found) - |> put_view(html: BubbliWeb.ErrorHTML, json: BubbliWeb.ErrorJSON) - |> render(:"404") - end - - def call(conn, {:error, :bad_request, error}) do - conn - |> put_status(:bad_request) - |> put_view(html: BubbliWeb.ErrorHTML, json: BubbliWeb.ErrorJSON) - |> render(:"400", error: error) - end -end diff --git a/app/lib/bubbli_web/controllers/page_controller.ex b/app/lib/bubbli_web/controllers/page_controller.ex new file mode 100644 index 0000000..b23a9db --- /dev/null +++ b/app/lib/bubbli_web/controllers/page_controller.ex @@ -0,0 +1,9 @@ +defmodule BubbliWeb.PageController do + use BubbliWeb, :controller + + def home(conn, _params) do + # The home page is often custom made, + # so skip the default app layout. + render(conn, :home, layout: false) + end +end diff --git a/app/lib/bubbli_web/controllers/page_html.ex b/app/lib/bubbli_web/controllers/page_html.ex new file mode 100644 index 0000000..9c663c5 --- /dev/null +++ b/app/lib/bubbli_web/controllers/page_html.ex @@ -0,0 +1,10 @@ +defmodule BubbliWeb.PageHTML do + @moduledoc """ + This module contains pages rendered by PageController. + + See the `page_html` directory for all templates available. + """ + use BubbliWeb, :html + + embed_templates "page_html/*" +end diff --git a/app/lib/bubbli_web/controllers/page_html/home.html.heex b/app/lib/bubbli_web/controllers/page_html/home.html.heex new file mode 100644 index 0000000..dc1820b --- /dev/null +++ b/app/lib/bubbli_web/controllers/page_html/home.html.heex @@ -0,0 +1,222 @@ +<.flash_group flash={@flash} /> + +
+
+ +

+ Phoenix Framework + + v<%= Application.spec(:phoenix, :vsn) %> + +

+

+ Peace of mind from prototype to production. +

+

+ Build rich, interactive web applications quickly, with less code and fewer moving parts. Join our growing community of developers using Phoenix to craft APIs, HTML5 apps and more, for fun or at scale. +

+ +
+
diff --git a/app/lib/bubbli_web/controllers/posts_controller.ex b/app/lib/bubbli_web/controllers/posts_controller.ex deleted file mode 100644 index d816679..0000000 --- a/app/lib/bubbli_web/controllers/posts_controller.ex +++ /dev/null @@ -1,51 +0,0 @@ -defmodule BubbliWeb.PostController do - use BubbliWeb, :controller - - import Ecto.Changeset - - alias BubbliWeb.Base64EncodedBinary - - require Logger - - action_fallback BubbliWeb.FallbackController - - def create(conn, params) do - user = conn.assigns[:current_user] - - types = %{ - timeline_id: :string, - # TODO: maybe content is treated as just an attachment? <- I think not - protected_content: Base64EncodedBinary, - encryption_algorithm: :map - # TODO: attachments - } - - {%{}, types} - |> cast(params, Map.keys(types)) - |> validate_required(~w/timeline_id protected_content encryption_algorithm/a) - |> apply_action(:insert) - |> case do - {:ok, normalized_input} -> - Logger.info("normalized_input: #{inspect(normalized_input)}") - Logger.debug("user: #{inspect(user)}") - - {:ok, post} = - Bubbli.Posts.create_post(%{ - protected_content: normalized_input.protected_content, - encryption_algorithm: normalized_input.encryption_algorithm, - author_id: user.id, - timeline_id: normalized_input.timeline_id - }) - - conn - |> put_status(:ok) - |> render(:successfully_created, %{post: post, timeline: post.timeline, author: user}) - - {:error, changeset} -> - conn - |> put_status(400) - |> put_view(json: BubbliWeb.ErrorJSON) - |> render(:"400", changeset: changeset) - end - end -end diff --git a/app/lib/bubbli_web/controllers/posts_json.ex b/app/lib/bubbli_web/controllers/posts_json.ex deleted file mode 100644 index b136253..0000000 --- a/app/lib/bubbli_web/controllers/posts_json.ex +++ /dev/null @@ -1,8 +0,0 @@ -defmodule BubbliWeb.PostJSON do - def successfully_created(%{post: post, timeline: timeline, author: author}) do - %{ - success: true, - post: BubbliWeb.PostView.render("post.json", %{post: post, timeline: timeline, author: author}) - } - end -end diff --git a/app/lib/bubbli_web/controllers/registration_controller.ex b/app/lib/bubbli_web/controllers/registration_controller.ex deleted file mode 100644 index a7d02b3..0000000 --- a/app/lib/bubbli_web/controllers/registration_controller.ex +++ /dev/null @@ -1,75 +0,0 @@ -defmodule BubbliWeb.RegistrationController do - use BubbliWeb, :controller - - import Ecto.Changeset - - require Logger - - action_fallback(BubbliWeb.FallbackController) - - def test(conn, _) do - conn |> put_status(:ok) |> render(:authenticated, current_user: conn.assigns[:current_user]) - end - - def register(conn, params) do - changeset = BubbliWeb.RegisterSchema.changeset(params) - - case apply_action(changeset, :insert) do - {:ok, normalized_input} -> - with {:valid_public_key_check, :ok} <- - {:valid_public_key_check, validate_public_key(normalized_input.public_key)}, - {:user_exists_check, false} <- {:user_exists_check, Bubbli.user_exists?(normalized_input.email)}, - {:ok, user} <- - Bubbli.register_user(%{ - email: normalized_input.email, - display_name: normalized_input.display_name, - username: normalized_input.username, - master_public_key: normalized_input.public_key, - client_keys: Enum.map(normalized_input.client_keys, &Map.from_struct/1), - timeline_key_map: Map.from_struct(normalized_input.timeline_key), - root_password_hash: normalized_input.root_password_hash - }) do - Logger.info("Successfully created user - #{normalized_input.email}}") - token = Bubbli.create_user_api_token(user) - - conn - |> Plug.Conn.put_resp_cookie("authorization", token, - http_only: true, - same_site: "Strict", - secure: true, - max_age: 60 * 60 * 24 - ) - |> put_status(:ok) - |> render(:successfully_registered, user: user) - else - {:valid_public_key_check, :error} -> - conn |> put_status(400) |> render(:invalid_public_key) - - {:user_exists_check, true} -> - conn |> put_status(409) |> render(:user_exists) - - whoops -> - Logger.error("Unexpected error: #{inspect(whoops)}") - conn |> put_status(500) |> put_view(json: BubbliWeb.ErrorJSON) |> render(:"500") - end - - {:error, error} -> - {:error, error} - end - end - - defp validate_public_key(public_PEM) do - # TODO(bianchi): move to independent module - # # erlang :public_key expects a DER encoded signature as opposed to the raw bytes - # # https://elixirforum.com/t/verifying-web-crypto-signatures-in-erlang-elixir/20727/2 - with [key_entry] <- :public_key.pem_decode(public_PEM), - public_key = :public_key.pem_entry_decode(key_entry), - false <- is_nil(public_key) do - :ok - else - error -> - Logger.warning("Invalid public key - error: #{error}") - :error - end - end -end diff --git a/app/lib/bubbli_web/controllers/registration_json.ex b/app/lib/bubbli_web/controllers/registration_json.ex deleted file mode 100644 index 2db6d67..0000000 --- a/app/lib/bubbli_web/controllers/registration_json.ex +++ /dev/null @@ -1,33 +0,0 @@ -defmodule BubbliWeb.RegistrationJSON do - @doc """ - """ - def authenticated(%{current_user: user}) do - %{ - sucess: true, - authenticated: true, - user_id: user.id - } - end - - def init(%{challenge: challenge}) do - %{ - success: true, - challenge: challenge.challenge_string - } - end - - def user_exists(_map) do - %{success: false, errors: [:email_already_registered]} - end - - def invalid_public_key(_map) do - %{success: false, errors: %{message: "invalid public key"}} - end - - def successfully_registered(%{user: user}) do - %{ - success: true, - user: BubbliWeb.UserView.render("user.json", %{user: user}) - } - end -end diff --git a/app/lib/bubbli_web/controllers/timeline_controller.ex b/app/lib/bubbli_web/controllers/timeline_controller.ex deleted file mode 100644 index 34ad573..0000000 --- a/app/lib/bubbli_web/controllers/timeline_controller.ex +++ /dev/null @@ -1,18 +0,0 @@ -defmodule BubbliWeb.TimelineController do - use BubbliWeb, :controller - - # import Ecto.Changeset - - require Logger - - action_fallback BubbliWeb.FallbackController - - def home(conn, _params) do - user = Map.fetch!(conn.assigns, :current_user) - posts = Bubbli.Posts.get_posts_for_user(user) - - conn - |> put_status(200) - |> render(:home, posts: posts) - end -end diff --git a/app/lib/bubbli_web/controllers/timeline_json.ex b/app/lib/bubbli_web/controllers/timeline_json.ex deleted file mode 100644 index 285e7da..0000000 --- a/app/lib/bubbli_web/controllers/timeline_json.ex +++ /dev/null @@ -1,8 +0,0 @@ -defmodule BubbliWeb.TimelineJSON do - def home(%{posts: posts}) do - %{ - success: true, - posts: Enum.map(posts, fn post -> BubbliWeb.PostView.render("post_with_resources.json", %{post: post}) end) - } - end -end diff --git a/app/lib/bubbli_web/controllers/user_controller.ex b/app/lib/bubbli_web/controllers/user_controller.ex deleted file mode 100644 index a17bdb0..0000000 --- a/app/lib/bubbli_web/controllers/user_controller.ex +++ /dev/null @@ -1,17 +0,0 @@ -defmodule BubbliWeb.UserController do - use BubbliWeb, :controller - - require Logger - - action_fallback BubbliWeb.FallbackController - - def current_user(conn, _) do - case Map.fetch(conn.assigns, :current_user) do - {:ok, user} -> - conn |> put_status(200) |> render(:user, user: user) - - _ -> - conn |> put_status(200) |> render(:user, user: nil) - end - end -end diff --git a/app/lib/bubbli_web/controllers/user_json.ex b/app/lib/bubbli_web/controllers/user_json.ex deleted file mode 100644 index 7c9e989..0000000 --- a/app/lib/bubbli_web/controllers/user_json.ex +++ /dev/null @@ -1,11 +0,0 @@ -defmodule BubbliWeb.UserJSON do - def user(%{user: nil}) do - %{} - end - - def user(%{user: user}) do - if user do - BubbliWeb.UserView.render("user.json", %{user: user}) - end - end -end diff --git a/app/lib/bubbli_web/ecto/base64_encoded_binary.ex b/app/lib/bubbli_web/ecto/base64_encoded_binary.ex deleted file mode 100644 index 676fa0f..0000000 --- a/app/lib/bubbli_web/ecto/base64_encoded_binary.ex +++ /dev/null @@ -1,26 +0,0 @@ -defmodule BubbliWeb.Base64EncodedBinary do - @moduledoc false - use Ecto.Type - - @impl true - def type, do: :binary - - @impl true - def cast(binary) when is_binary(binary) do - case Base.decode64(binary) do - {:ok, decoded_binary} -> {:ok, decoded_binary} - _ -> :error - end - end - - @impl true - def load(binary) when is_binary(binary) do - case Base.decode64(binary) do - {:ok, decoded_binary} -> {:ok, decoded_binary} - _ -> :error - end - end - - @impl true - def dump(binary) when is_binary(binary), do: {:ok, Base.encode64(binary)} -end diff --git a/app/lib/bubbli_web/ecto/client_key_schema.ex b/app/lib/bubbli_web/ecto/client_key_schema.ex deleted file mode 100644 index 63e7ba3..0000000 --- a/app/lib/bubbli_web/ecto/client_key_schema.ex +++ /dev/null @@ -1,22 +0,0 @@ -defmodule BubbliWeb.ClientKeySchema do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - alias BubbliWeb.Base64EncodedBinary - - embedded_schema do - field :key_algorithm, :map - field :wrap_algorithm, :map - field :key_usages, {:array, :string} - field :protected_private_key, Base64EncodedBinary - field :type, :string - end - - def changeset(client_key, attrs \\ %{}) do - client_key - |> cast(attrs, [:key_algorithm, :wrap_algorithm, :key_usages, :protected_private_key, :type]) - |> validate_required([:key_algorithm, :wrap_algorithm, :key_usages, :protected_private_key, :type]) - end -end diff --git a/app/lib/bubbli_web/ecto/register_schema.ex b/app/lib/bubbli_web/ecto/register_schema.ex deleted file mode 100644 index fdc0c0d..0000000 --- a/app/lib/bubbli_web/ecto/register_schema.ex +++ /dev/null @@ -1,35 +0,0 @@ -defmodule BubbliWeb.RegisterSchema do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - alias BubbliWeb.Base64EncodedBinary - alias BubbliWeb.ClientKeySchema - alias BubbliWeb.RegisterSchema - alias BubbliWeb.TimelineKeySchema - - embedded_schema do - field :email, :string - field :display_name, :string - field :username, :string - field :public_key, :string - embeds_many :client_keys, ClientKeySchema - embeds_one :timeline_key, TimelineKeySchema - field :root_password_hash, Base64EncodedBinary - end - - def changeset(params) do - %RegisterSchema{} - |> Ecto.Changeset.cast(params, [ - :email, - :display_name, - :username, - :public_key, - :root_password_hash - ]) - |> validate_required([:email, :display_name, :username, :public_key, :root_password_hash]) - |> cast_embed(:client_keys, with: &ClientKeySchema.changeset/2, required: true) - |> cast_embed(:timeline_key, with: &TimelineKeySchema.changeset/2) - end -end diff --git a/app/lib/bubbli_web/ecto/timeline_key_schema.ex b/app/lib/bubbli_web/ecto/timeline_key_schema.ex deleted file mode 100644 index 7ed320f..0000000 --- a/app/lib/bubbli_web/ecto/timeline_key_schema.ex +++ /dev/null @@ -1,21 +0,0 @@ -defmodule BubbliWeb.TimelineKeySchema do - @moduledoc false - use Ecto.Schema - - import Ecto.Changeset - - alias BubbliWeb.Base64EncodedBinary - - embedded_schema do - field :key_algorithm, :map - field :wrap_algorithm, :map - field :key_usages, {:array, :string} - field :protected_encryption_key, Base64EncodedBinary - end - - def changeset(timeline_key, params \\ %{}) do - timeline_key - |> cast(params, [:key_algorithm, :wrap_algorithm, :key_usages, :protected_encryption_key]) - |> validate_required([:key_algorithm, :wrap_algorithm, :key_usages, :protected_encryption_key]) - end -end diff --git a/app/lib/bubbli_web/endpoint.ex b/app/lib/bubbli_web/endpoint.ex index e8acfc8..86741c6 100644 --- a/app/lib/bubbli_web/endpoint.ex +++ b/app/lib/bubbli_web/endpoint.ex @@ -7,14 +7,14 @@ defmodule BubbliWeb.Endpoint do @session_options [ store: :cookie, key: "_bubbli_key", - signing_salt: "VwrSQ8K2", + signing_salt: "BqOWFq3e", same_site: "Lax" ] - socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]] + socket "/live", Phoenix.LiveView.Socket, + websocket: [connect_info: [session: @session_options]], + longpoll: [connect_info: [session: @session_options]] - # TODO: obv fix - plug Corsica, origins: "*", allow_headers: ["accept", "content-type"] # Serve at "/" the static files from "priv/static" directory. # # You should set gzip to true if you are running phx.digest @@ -28,6 +28,8 @@ defmodule BubbliWeb.Endpoint do # Code reloading can be explicitly enabled under the # :code_reloader configuration of your endpoint. if code_reloading? do + socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket + plug Phoenix.LiveReloader plug Phoenix.CodeReloader plug Phoenix.Ecto.CheckRepoStatus, otp_app: :bubbli end diff --git a/app/lib/bubbli_web/router.ex b/app/lib/bubbli_web/router.ex index 4b5105a..bb58e3c 100644 --- a/app/lib/bubbli_web/router.ex +++ b/app/lib/bubbli_web/router.ex @@ -1,38 +1,29 @@ defmodule BubbliWeb.Router do use BubbliWeb, :router - pipeline :api do - plug(:accepts, ["json"]) + pipeline :browser do + plug :accepts, ["html"] + plug :fetch_session + plug :fetch_live_flash + plug :put_root_layout, html: {BubbliWeb.Layouts, :root} + plug :protect_from_forgery + plug :put_secure_browser_headers end - pipeline :authed do - plug(BubbliWeb.Plug.Auth) + pipeline :api do + plug :accepts, ["json"] end - # routes for authn - scope "/api/v1", BubbliWeb do - pipe_through([:api]) + scope "/", BubbliWeb do + pipe_through :browser - post("/auth/register", RegistrationController, :register) - - post("/auth/login", AuthenticationController, :login) - delete("/auth/logout", AuthenticationController, :logout) + get "/", PageController, :home end - # authenticated routes - scope "/api/v1", BubbliWeb do - pipe_through([:api, :authed]) - get("/current_user", UserController, :current_user) - get("/test", RegistrationController, :test) - # delete "/auth/logout", AuthenticationController, :delete - # get("/dashboard", DashboardController, :show) - - get("/timelines/home", TimelineController, :home) - - scope "/timelines/:timeline_id" do - resources("/posts", PostController, only: [:index, :show, :create, :update, :delete]) - end - end + # Other scopes may use custom stacks. + # scope "/api", BubbliWeb do + # pipe_through :api + # end # Enable LiveDashboard and Swoosh mailbox preview in development if Application.compile_env(:bubbli, :dev_routes) do @@ -44,10 +35,10 @@ defmodule BubbliWeb.Router do import Phoenix.LiveDashboard.Router scope "/dev" do - pipe_through([:fetch_session, :protect_from_forgery]) + pipe_through :browser - live_dashboard("/dashboard", metrics: BubbliWeb.Telemetry) - forward("/mailbox", Plug.Swoosh.MailboxPreview) + live_dashboard "/dashboard", metrics: BubbliWeb.Telemetry + forward "/mailbox", Plug.Swoosh.MailboxPreview end end end diff --git a/app/lib/bubbli_web/telemetry.ex b/app/lib/bubbli_web/telemetry.ex index b4e8ea4..9ef90dc 100644 --- a/app/lib/bubbli_web/telemetry.ex +++ b/app/lib/bubbli_web/telemetry.ex @@ -1,7 +1,5 @@ defmodule BubbliWeb.Telemetry do - @moduledoc false use Supervisor - import Telemetry.Metrics def start_link(arg) do @@ -45,7 +43,7 @@ defmodule BubbliWeb.Telemetry do summary("phoenix.socket_connected.duration", unit: {:native, :millisecond} ), - summary("phoenix.channel_join.duration", + summary("phoenix.channel_joined.duration", unit: {:native, :millisecond} ), summary("phoenix.channel_handled_in.duration", @@ -72,7 +70,8 @@ defmodule BubbliWeb.Telemetry do ), summary("bubbli.repo.query.idle_time", unit: {:native, :millisecond}, - description: "The time the connection spent waiting before being checked out for the query" + description: + "The time the connection spent waiting before being checked out for the query" ), # VM Metrics diff --git a/app/lib/bubbli_web/token.ex b/app/lib/bubbli_web/token.ex deleted file mode 100644 index 6e40f2b..0000000 --- a/app/lib/bubbli_web/token.ex +++ /dev/null @@ -1,31 +0,0 @@ -defmodule BubbliWeb.Token do - @moduledoc false - require Logger - - # 1 day - @token_age_secs 60 * 60 * 24 - - def signing_salt do - Application.get_env(:bubbli, :signing_salt) - end - - def sign(data) do - Phoenix.Token.sign(BubbliWeb.Endpoint, signing_salt(), data) - end - - def verify(token) do - case Phoenix.Token.verify( - BubbliWeb.Endpoint, - signing_salt(), - token, - max_age: @token_age_secs - ) do - {:ok, data} -> - {:ok, data} - - {:error, error} -> - Logger.warning("Got error verifying token: #{error}") - {:error, :unauthenticated} - end - end -end diff --git a/app/lib/bubbli_web/user_auth.ex b/app/lib/bubbli_web/user_auth.ex deleted file mode 100644 index 61048c8..0000000 --- a/app/lib/bubbli_web/user_auth.ex +++ /dev/null @@ -1,264 +0,0 @@ -defmodule BubbliWeb.UserAuth do - @moduledoc false - use BubbliWeb, :verified_routes - - import Plug.Conn - # import Phoenix.Controller - - # Make the remember me cookie valid for 60 days. - # If you want bump or reduce this value, also change - # the token expiry itself in UserToken. - # @max_age 60 * 60 * 24 * 60 - # @remember_me_cookie "_tmp_web_user_remember_me" - # @remember_me_options [sign: true, max_age: @max_age, same_site: "Lax"] - - # @confirm_validity_in_days 7 - # @reset_password_validity_in_days 1 - - def fetch_api_user(conn, _opts) do - with {:ok, token} <- get_auth_token(conn), - {:ok, user} <- Bubbli.fetch_user_by_api_token(token) do - assign(conn, :current_user, user) - else - _ -> - conn - |> send_resp(:unauthorized, "No access for you") - |> halt() - end - end - - def get_auth_token(conn) do - case get_req_header(conn, "authorization") do - ["Bearer " <> token] -> - {:ok, token} - - _ -> - case Map.fetch(conn.req_cookies, "authorization") do - {:ok, token} -> {:ok, token} - _ -> {:error, :notfound} - end - end - end - - def log_in_api_user(conn, user) do - token = Bubbli.create_user_api_token(user) - - put_resp_header(conn, "authorization", "Bearer #{token}") - end - - # defp days_for_context("api-token"), do: 365 - # defp days_for_context("confirm"), do: @confirm_validity_in_days - # defp days_for_context("reset_password"), do: @reset_password_validity_in_days - - # @doc """ - # Logs the user in. - - # It renews the session ID and clears the whole session - # to avoid fixation attacks. See the renew_session - # function to customize this behaviour. - - # It also sets a `:live_socket_id` key in the session, - # so LiveView sessions are identified and automatically - # disconnected on log out. The line can be safely removed - # if you are not using LiveView. - # """ - # def log_in_user(conn, user, params \\ %{}) do - # token = Bubbli.generate_user_session_token(user) - # user_return_to = get_session(conn, :user_return_to) - - # conn - # |> renew_session() - # |> put_token_in_session(token) - # |> maybe_write_remember_me_cookie(token, params) - # |> redirect(to: user_return_to || signed_in_path(conn)) - # end - - # defp maybe_write_remember_me_cookie(conn, token, %{"remember_me" => "true"}) do - # put_resp_cookie(conn, @remember_me_cookie, token, @remember_me_options) - # end - - # defp maybe_write_remember_me_cookie(conn, _token, _params) do - # conn - # end - - # This function renews the session ID and erases the whole - # session to avoid fixation attacks. If there is any data - # in the session you may want to preserve after log in/log out, - # you must explicitly fetch the session data before clearing - # and then immediately set it after clearing, for example: - # - # defp renew_session(conn) do - # preferred_locale = get_session(conn, :preferred_locale) - # - # conn - # |> configure_session(renew: true) - # |> clear_session() - # |> put_session(:preferred_locale, preferred_locale) - # end - # - # defp renew_session(conn) do - # conn - # |> configure_session(renew: true) - # |> clear_session() - # end - - # @doc """ - # Logs the user out. - - # It clears all session data for safety. See renew_session. - # """ - # def log_out_user(conn) do - # user_token = get_session(conn, :user_token) - # user_token && Accounts.delete_user_session_token(user_token) - - # if live_socket_id = get_session(conn, :live_socket_id) do - # BubbliWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{}) - # end - - # conn - # |> renew_session() - # |> delete_resp_cookie(@remember_me_cookie) - # |> redirect(to: ~p"/") - # end - - # @doc """ - # Authenticates the user by looking into the session - # and remember me token. - # """ - # def fetch_current_user(conn, _opts) do - # {user_token, conn} = ensure_user_token(conn) - # user = user_token && Accounts.get_user_by_session_token(user_token) - # assign(conn, :current_user, user) - # end - - # defp ensure_user_token(conn) do - # if token = get_session(conn, :user_token) do - # {token, conn} - # else - # conn = fetch_cookies(conn, signed: [@remember_me_cookie]) - - # if token = conn.cookies[@remember_me_cookie] do - # {token, put_token_in_session(conn, token)} - # else - # {nil, conn} - # end - # end - # end - - # @doc """ - # Handles mounting and authenticating the current_user in LiveViews. - - # ## `on_mount` arguments - - # * `:mount_current_user` - Assigns current_user - # to socket assigns based on user_token, or nil if - # there's no user_token or no matching user. - - # * `:ensure_authenticated` - Authenticates the user from the session, - # and assigns the current_user to socket assigns based - # on user_token. - # Redirects to login page if there's no logged user. - - # * `:redirect_if_user_is_authenticated` - Authenticates the user from the session. - # Redirects to signed_in_path if there's a logged user. - - # ## Examples - - # Use the `on_mount` lifecycle macro in LiveViews to mount or authenticate - # the current_user: - - # defmodule BubbliWeb.PageLive do - # use BubbliWeb, :live_view - - # on_mount {BubbliWeb.UserAuth, :mount_current_user} - # ... - # end - - # Or use the `live_session` of your router to invoke the on_mount callback: - - # live_session :authenticated, on_mount: [{BubbliWeb.UserAuth, :ensure_authenticated}] do - # live "/profile", ProfileLive, :index - # end - # """ - # def on_mount(:mount_current_user, _params, session, socket) do - # {:cont, mount_current_user(socket, session)} - # end - - # def on_mount(:ensure_authenticated, _params, session, socket) do - # socket = mount_current_user(socket, session) - - # if socket.assigns.current_user do - # {:cont, socket} - # else - # socket = - # socket - # |> Phoenix.LiveView.put_flash(:error, "You must log in to access this page.") - # |> Phoenix.LiveView.redirect(to: ~p"/users/log_in") - - # {:halt, socket} - # end - # end - - # def on_mount(:redirect_if_user_is_authenticated, _params, session, socket) do - # socket = mount_current_user(socket, session) - - # if socket.assigns.current_user do - # {:halt, Phoenix.LiveView.redirect(socket, to: signed_in_path(socket))} - # else - # {:cont, socket} - # end - # end - - # defp mount_current_user(socket, session) do - # Phoenix.Component.assign_new(socket, :current_user, fn -> - # if user_token = session["user_token"] do - # Accounts.get_user_by_session_token(user_token) - # end - # end) - # end - - # @doc """ - # Used for routes that require the user to not be authenticated. - # """ - # def redirect_if_user_is_authenticated(conn, _opts) do - # if conn.assigns[:current_user] do - # conn - # |> redirect(to: signed_in_path(conn)) - # |> halt() - # else - # conn - # end - # end - - # @doc """ - # Used for routes that require the user to be authenticated. - - # If you want to enforce the user email is confirmed before - # they use the application at all, here would be a good place. - # """ - # def require_authenticated_user(conn, _opts) do - # if conn.assigns[:current_user] do - # conn - # else - # conn - # |> put_flash(:error, "You must log in to access this page.") - # |> maybe_store_return_to() - # |> redirect(to: ~p"/users/log_in") - # |> halt() - # end - # end - - # defp put_token_in_session(conn, token) do - # conn - # |> put_session(:user_token, token) - # |> put_session(:live_socket_id, "users_sessions:#{Base.url_encode64(token)}") - # end - - # defp maybe_store_return_to(%{method: "GET"} = conn) do - # put_session(conn, :user_return_to, current_path(conn)) - # end - - # defp maybe_store_return_to(conn), do: conn - - # defp signed_in_path(_conn), do: ~p"/" -end diff --git a/app/lib/bubbli_web/views/client_key_view.ex b/app/lib/bubbli_web/views/client_key_view.ex deleted file mode 100644 index b458805..0000000 --- a/app/lib/bubbli_web/views/client_key_view.ex +++ /dev/null @@ -1,10 +0,0 @@ -defmodule BubbliWeb.ClientKeyView do - def render("key.json", %{client_key: key}) do - %{ - protected_private_key: Base.encode64(key.protected_private_key), - key_algorithm: key.key_algorithm, - wrap_algorithm: key.wrap_algorithm, - key_usages: key.key_usages - } - end -end diff --git a/app/lib/bubbli_web/views/encryption_key_view.ex b/app/lib/bubbli_web/views/encryption_key_view.ex deleted file mode 100644 index b0a83c6..0000000 --- a/app/lib/bubbli_web/views/encryption_key_view.ex +++ /dev/null @@ -1,11 +0,0 @@ -defmodule BubbliWeb.EncryptionKeyView do - def render("key.json", %{encryption_key: key}) do - %{ - encryption_context_id: key.encryption_context_id, - protected_encryption_key: Base.encode64(key.protected_encryption_key), - key_algorithm: key.key_algorithm, - wrap_algorithm: key.wrap_algorithm, - key_usages: key.key_usages - } - end -end diff --git a/app/lib/bubbli_web/views/post_view.ex b/app/lib/bubbli_web/views/post_view.ex deleted file mode 100644 index db6c592..0000000 --- a/app/lib/bubbli_web/views/post_view.ex +++ /dev/null @@ -1,28 +0,0 @@ -defmodule BubbliWeb.PostView do - def render("post.json", %{post: post}) do - %{ - id: post.id, - protected_content: Base.encode64(post.protected_content), - encryption_algorithm: post.encryption_algorithm, - timeline_id: post.timeline_id, - inserted_at: post.inserted_at, - updated_at: post.updated_at, - author_id: post.author_id - # comments: post.comments - } - end - - def render("post_with_resources.json", %{post: post}) do - %{ - id: post.id, - protected_content: Base.encode64(post.protected_content), - encryption_algorithm: post.encryption_algorithm, - timeline: BubbliWeb.TimelineView.render("timeline.json", %{timeline: post.timeline}), - encryption_context_id: post.timeline.encryption_context.id, - inserted_at: post.inserted_at, - updated_at: post.updated_at, - author: BubbliWeb.UserView.render("user.json", %{user: post.author}) - # comments: post.comments - } - end -end diff --git a/app/lib/bubbli_web/views/timeline_view.ex b/app/lib/bubbli_web/views/timeline_view.ex deleted file mode 100644 index 42100fc..0000000 --- a/app/lib/bubbli_web/views/timeline_view.ex +++ /dev/null @@ -1,9 +0,0 @@ -defmodule BubbliWeb.TimelineView do - def render("timeline.json", %{timeline: timeline}) do - %{ - id: timeline.id, - type: timeline.type, - encryption_context_id: timeline.encryption_context.id - } - end -end diff --git a/app/lib/bubbli_web/views/user_view.ex b/app/lib/bubbli_web/views/user_view.ex deleted file mode 100644 index 3a2e49b..0000000 --- a/app/lib/bubbli_web/views/user_view.ex +++ /dev/null @@ -1,24 +0,0 @@ -defmodule BubbliWeb.UserView do - def render("user.json", %{user: user}) do - %{ - id: user.id, - email: user.email, - is_active: user.is_active, - display_name: user.display_name, - username: user.username, - home_timeline: BubbliWeb.TimelineView.render("timeline.json", %{timeline: user.home_timeline}) - } - end - - def render("user_with_keys.json", %{user: user, encryption_keys: keys}) do - %{ - id: user.id, - email: user.email, - is_active: user.is_active, - display_name: user.display_name, - username: user.username, - home_timeline: BubbliWeb.TimelineView.render("timeline.json", %{timeline: user.home_timeline}), - encryption_keys: Enum.map(keys, &BubbliWeb.EncryptionKeyView.render("key.json", %{encryption_key: &1})) - } - end -end diff --git a/app/mix.exs b/app/mix.exs index c43144e..52b188f 100644 --- a/app/mix.exs +++ b/app/mix.exs @@ -9,26 +9,7 @@ defmodule Bubbli.MixProject do elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, aliases: aliases(), - deps: deps(), - compilers: [:boundary] ++ Mix.compilers(), - boundary: [ - default: [ - check: [ - apps: [:phoenix, :ecto, {:mix, :runtime}] - ] - ] - ], - test_coverage: [tool: ExCoveralls], - preferred_cli_env: [ - coveralls: :test, - "coveralls.detail": :test, - "coveralls.post": :test, - "coveralls.html": :test - ], - dialyzer: [ - # Put the project-level PLT in the priv/ directory (instead of the default _build/ location) - plt_file: {:no_warn, "priv/plts/project.plt"} - ] + deps: deps() ] end @@ -51,43 +32,32 @@ defmodule Bubbli.MixProject do # Type `mix help deps` for examples and options. defp deps do [ - {:argon2_elixir, "~> 4.0"}, - {:bandit, "~> 1.1"}, - {:corsica, "~> 2.1"}, - {:ecto_sql, "~> 3.6"}, + {:phoenix, "~> 1.7.17"}, + {:phoenix_ecto, "~> 4.5"}, + {:ecto_sql, "~> 3.10"}, + {:postgrex, ">= 0.0.0"}, + {:phoenix_html, "~> 4.1"}, + {:phoenix_live_reload, "~> 1.2", only: :dev}, + {:phoenix_live_view, "~> 1.0.0"}, + {:floki, ">= 0.30.0", only: :test}, + {:phoenix_live_dashboard, "~> 0.8.3"}, + {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, + {:tailwind, "~> 0.2", runtime: Mix.env() == :dev}, + {:heroicons, + github: "tailwindlabs/heroicons", + tag: "v2.1.1", + sparse: "optimized", + app: false, + compile: false, + depth: 1}, + {:swoosh, "~> 1.5"}, {:finch, "~> 0.13"}, - {:flop, "~> 0.24.1"}, + {:telemetry_metrics, "~> 1.0"}, + {:telemetry_poller, "~> 1.0"}, {:gettext, "~> 0.20"}, - {:guardian, "~> 2.0"}, {:jason, "~> 1.2"}, - {:phoenix, "~> 1.7.2"}, - {:phoenix_ecto, "~> 4.4"}, - {:phoenix_live_dashboard, "~> 0.8"}, - {:postgrex, ">= 0.0.0"}, - {:swoosh, "~> 1.3"}, - {:telemetry_metrics, "~> 0.6"}, - {:telemetry_poller, "~> 1.0"}, - {:timex, "~> 3.0"}, - {:waffle, "~> 1.1"}, - {:ex_aws, "~> 2.1.2"}, - {:ex_aws_s3, "~> 2.0"}, - {:hackney, "~> 1.9"}, - {:sweet_xml, "~> 0.6"}, - - # build - {:esbuild, "~> 0.7", runtime: Mix.env() == :dev}, - {:tailwind, "~> 0.2", runtime: Mix.env() == :dev}, - - # non-prod deps - {:boundary, "~> 0.10", runtime: false}, - {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, - {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, - {:excoveralls, "~> 0.18", only: :test}, - {:ex_doc, "~> 0.27", only: :dev, runtime: false}, - {:faker, "~> 0.17", only: :test}, - {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false}, - {:sobelow, "~> 0.12", only: [:dev, :test], runtime: false}, - {:styler, "~> 0.8", only: [:dev, :test], runtime: false} + {:dns_cluster, "~> 0.1.1"}, + {:bandit, "~> 1.5"} ] end @@ -104,9 +74,12 @@ defmodule Bubbli.MixProject do "ecto.reset": ["ecto.drop", "ecto.setup"], test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"], "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"], - "assets.build": ["tailwind default", "esbuild default"], - "assets.deploy": ["tailwind default --minify", "esbuild default --minify", "phx.digest"], - check: ["format", "credo --strict", "compile --warnings-as-errors", "dialyzer", "docs"] + "assets.build": ["tailwind bubbli", "esbuild bubbli"], + "assets.deploy": [ + "tailwind bubbli --minify", + "esbuild bubbli --minify", + "phx.digest" + ] ] end end diff --git a/app/mix.lock b/app/mix.lock index 6508cf7..c551248 100644 --- a/app/mix.lock +++ b/app/mix.lock @@ -1,86 +1,41 @@ %{ - "argon2_elixir": {:hex, :argon2_elixir, "4.0.0", "7f6cd2e4a93a37f61d58a367d82f830ad9527082ff3c820b8197a8a736648941", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "f9da27cf060c9ea61b1bd47837a28d7e48a8f6fa13a745e252556c14f9132c7f"}, - "bandit": {:hex, :bandit, "1.2.3", "a98d664a96fec23b68e776062296d76a94b4459795b38209f4ae89cb4225709c", [:mix], [{:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "3e29150245a9b5f56944434e5240966e75c917dad248f689ab589b32187a81af"}, - "blankable": {:hex, :blankable, "1.0.0", "89ab564a63c55af117e115144e3b3b57eb53ad43ba0f15553357eb283e0ed425", [:mix], [], "hexpm", "7cf11aac0e44f4eedbee0c15c1d37d94c090cb72a8d9fddf9f7aec30f9278899"}, - "boundary": {:hex, :boundary, "0.10.1", "4228e788754ff81a51bec30358095fc6739114ba0e99241a642fef4db6d52e05", [:mix], [], "hexpm", "4019d56c806766e2c467ae12a1dbe60e183373af69c32cc6d1f87d9e0b4c59e5"}, - "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, - "castore": {:hex, :castore, "1.0.5", "9eeebb394cc9a0f3ae56b813459f990abb0a3dedee1be6b27fdb50301930502f", [:mix], [], "hexpm", "8d7c597c3e4a64c395980882d4bca3cebb8d74197c590dc272cfd3b6a6310578"}, - "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, - "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, - "comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"}, - "corsica": {:hex, :corsica, "2.1.3", "dccd094ffce38178acead9ae743180cdaffa388f35f0461ba1e8151d32e190e6", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "616c08f61a345780c2cf662ff226816f04d8868e12054e68963e95285b5be8bc"}, - "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"}, - "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, - "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, - "credo": {:hex, :credo, "1.7.5", "643213503b1c766ec0496d828c90c424471ea54da77c8a168c725686377b9545", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f799e9b5cd1891577d8c773d245668aa74a2fcd15eb277f51a0131690ebfb3fd"}, - "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, - "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, - "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, - "ecto": {:hex, :ecto, "3.11.1", "4b4972b717e7ca83d30121b12998f5fcdc62ba0ed4f20fd390f16f3270d85c3e", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebd3d3772cd0dfcd8d772659e41ed527c28b2a8bde4b00fe03e0463da0f1983b"}, - "ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"}, - "elixir_make": {:hex, :elixir_make, "0.7.8", "505026f266552ee5aabca0b9f9c229cbb496c689537c9f922f3eb5431157efc7", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "7a71945b913d37ea89b06966e1342c85cfe549b15e6d6d081e8081c493062c07"}, - "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, - "esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"}, - "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, - "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.3", "422468e5c3e1a4da5298e66c3468b465cfd354b842e512cb1f6fbbe4e2f5bdaf", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "4f09dd372cc386550e484808c5ac5027766c8d0cd8271ccc578b82ee6ef4f3b8"}, - "ex_doc": {:hex, :ex_doc, "0.31.1", "8a2355ac42b1cc7b2379da9e40243f2670143721dd50748bf6c3b1184dae2089", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3178c3a407c557d8343479e1ff117a96fd31bafe52a039079593fb0524ef61b0"}, - "excoveralls": {:hex, :excoveralls, "0.18.0", "b92497e69465dc51bc37a6422226ee690ab437e4c06877e836f1c18daeb35da9", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1109bb911f3cb583401760be49c02cbbd16aed66ea9509fc5479335d284da60b"}, - "expo": {:hex, :expo, "0.5.2", "beba786aab8e3c5431813d7a44b828e7b922bfa431d6bfbada0904535342efe2", [:mix], [], "hexpm", "8c9bfa06ca017c9cb4020fabe980bc7fdb1aaec059fd004c2ab3bff03b1c599c"}, - "faker": {:hex, :faker, "0.18.0", "943e479319a22ea4e8e39e8e076b81c02827d9302f3d32726c5bf82f430e6e14", [:mix], [], "hexpm", "bfbdd83958d78e2788e99ec9317c4816e651ad05e24cfd1196ce5db5b3e81797"}, - "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"}, - "finch": {:hex, :finch, "0.18.0", "944ac7d34d0bd2ac8998f79f7a811b21d87d911e77a786bc5810adb75632ada4", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "69f5045b042e531e53edc2574f15e25e735b522c37e2ddb766e15b979e03aa65"}, - "flop": {:hex, :flop, "0.24.1", "d65af51f7afee3fd76ca481aa1d33854bb853c847ef4de583a85e8a153f23cd2", [:mix], [{:ecto, "~> 3.11", [hex: :ecto, repo: "hexpm", optional: false]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}], "hexpm", "aecbacdfef279d455131f143821f12b4e13f22b85693c38f78359455bc54178b"}, - "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"}, - "git_hooks": {:hex, :git_hooks, "0.7.3", "09489e94d88dfc767662e22aff2b6208bd7cf555a19dd0e1477cca4683ce0701", [:mix], [{:blankable, "~> 1.0.0", [hex: :blankable, repo: "hexpm", optional: false]}, {:recase, "~> 0.7.0", [hex: :recase, repo: "hexpm", optional: false]}], "hexpm", "d6ddedeb4d3a8602bc3f84e087a38f6150a86d9e790628ed8bc70e6d90681659"}, - "guardian": {:hex, :guardian, "2.3.2", "78003504b987f2b189d76ccf9496ceaa6a454bb2763627702233f31eb7212881", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "b189ff38cd46a22a8a824866a6867ca8722942347f13c33f7d23126af8821b52"}, - "hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"}, - "hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"}, - "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, - "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"}, - "jose": {:hex, :jose, "1.11.6", "613fda82552128aa6fb804682e3a616f4bc15565a048dabd05b1ebd5827ed965", [:mix, :rebar3], [], "hexpm", "6275cb75504f9c1e60eeacb771adfeee4905a9e182103aa59b53fed651ff9738"}, - "makeup": {:hex, :makeup, "1.1.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, - "makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"}, - "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"}, - "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mint": {:hex, :mint, "1.5.2", "4805e059f96028948870d23d7783613b7e6b0e2fb4e98d720383852a760067fd", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "d77d9e9ce4eb35941907f1d3df38d8f750c357865353e21d335bdcdf6d892a02"}, - "mix_audit": {:hex, :mix_audit, "2.1.2", "6cd5c5e2edbc9298629c85347b39fb3210656e541153826efd0b2a63767f3395", [:make, :mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.9", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "68d2f06f96b9c445a23434c9d5f09682866a5b4e90f631829db1c64f140e795b"}, - "nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, - "nimble_pool": {:hex, :nimble_pool, "1.0.0", "5eb82705d138f4dd4423f69ceb19ac667b3b492ae570c9f5c900bb3d2f50a847", [:mix], [], "hexpm", "80be3b882d2d351882256087078e1b1952a28bf98d0a287be87e4a24a710b67a"}, - "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, - "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "2.1.0", "ce2f75056d43281df044a6da902c933f73789dcea560e25c24c9ede80b8365cc", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "bf8aa304bd2b47ed74de6e5eb4c6b7dc766b936a0a86d643ada89657c715f525"}, - "phoenix": {:hex, :phoenix, "1.7.11", "1d88fc6b05ab0c735b250932c4e6e33bfa1c186f76dcf623d8dd52f07d6379c7", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "b1ec57f2e40316b306708fe59b92a16b9f6f4bf50ccfa41aa8c7feb79e0ec02a"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.5.0", "1a1f841ccda19b15f1d82968840a5b895c5f687b6734e430e4b2dbe035ca1837", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "13990570fde09e16959ef214501fe2813e1192d62ca753ec8798980580436f94"}, + "bandit": {:hex, :bandit, "1.6.0", "9cb6c67c27cecab2d0c93968cb957fa8decccb7275193c8bf33f97397b3ac25d", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "fd2491e564a7c5e11ff8496ebf530c342c742452c59de17ac0fb1f814a0ab01a"}, + "castore": {:hex, :castore, "1.0.10", "43bbeeac820f16c89f79721af1b3e092399b3a1ecc8df1a472738fd853574911", [:mix], [], "hexpm", "1b0b7ea14d889d9ea21202c43a4fa015eb913021cb535e8ed91946f4b77a8848"}, + "db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"}, + "decimal": {:hex, :decimal, "2.2.0", "df3d06bb9517e302b1bd265c1e7f16cda51547ad9d99892049340841f3e15836", [:mix], [], "hexpm", "af8daf87384b51b7e611fb1a1f2c4d4876b65ef968fa8bd3adf44cff401c7f21"}, + "dns_cluster": {:hex, :dns_cluster, "0.1.3", "0bc20a2c88ed6cc494f2964075c359f8c2d00e1bf25518a6a6c7fd277c9b0c66", [:mix], [], "hexpm", "46cb7c4a1b3e52c7ad4cbe33ca5079fbde4840dedeafca2baf77996c2da1bc33"}, + "ecto": {:hex, :ecto, "3.12.5", "4a312960ce612e17337e7cefcf9be45b95a3be6b36b6f94dfb3d8c361d631866", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6eb18e80bef8bb57e17f5a7f068a1719fbda384d40fc37acb8eb8aeca493b6ea"}, + "ecto_sql": {:hex, :ecto_sql, "3.12.1", "c0d0d60e85d9ff4631f12bafa454bc392ce8b9ec83531a412c12a0d415a3a4d0", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "aff5b958a899762c5f09028c847569f7dfb9cc9d63bdb8133bff8a5546de6bf5"}, + "esbuild": {:hex, :esbuild, "0.8.2", "5f379dfa383ef482b738e7771daf238b2d1cfb0222bef9d3b20d4c8f06c7a7ac", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "558a8a08ed78eb820efbfda1de196569d8bfa9b51e8371a1934fbb31345feda7"}, + "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"}, + "file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"}, + "finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"}, + "floki": {:hex, :floki, "0.36.3", "1102f93b16a55bc5383b85ae3ec470f82dee056eaeff9195e8afdf0ef2a43c30", [:mix], [], "hexpm", "fe0158bff509e407735f6d40b3ee0d7deb47f3f3ee7c6c182ad28599f9f6b27a"}, + "gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"}, + "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized", depth: 1]}, + "hpax": {:hex, :hpax, "1.0.0", "28dcf54509fe2152a3d040e4e3df5b265dcb6cb532029ecbacf4ce52caea3fd2", [:mix], [], "hexpm", "7f1314731d711e2ca5fdc7fd361296593fc2542570b3105595bb0bc6d0fad601"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, + "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, + "mint": {:hex, :mint, "1.6.2", "af6d97a4051eee4f05b5500671d47c3a67dac7386045d87a904126fd4bbcea2e", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "5ee441dffc1892f1ae59127f74afe8fd82fda6587794278d924e4d90ea3d63f9"}, + "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, + "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, + "phoenix": {:hex, :phoenix, "1.7.17", "2fcdceecc6fb90bec26fab008f96abbd0fd93bc9956ec7985e5892cf545152ca", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "50e8ad537f3f7b0efb1509b2f75b5c918f697be6a45d48e49a30d3b7c0e464c9"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.3", "f686701b0499a07f2e3b122d84d52ff8a31f5def386e03706c916f6feddf69ef", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "909502956916a657a197f94cc1206d9a65247538de8a5e186f7537c895d95764"}, "phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"}, - "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.11", "63975ad42e09f21ad0db53e6ee449804c844995019d133fee275900f29e4a099", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "56eb5a75e0981ce362b0daf50a6c1a6385863a767db3ae06ae17461458da0bc8"}, + "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.5", "d5f44d7dbd7cfacaa617b70c5a14b2b598d6f93b9caa8e350c51d56cd4350a9b", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "1d73920515554d7d6c548aee0bf10a4780568b029d042eccb336db29ea0dad70"}, + "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "1.0.0", "3a10dfce8f87b2ad4dc65de0732fc2a11e670b2779a19e8d3281f4619a85bce4", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "254caef0028765965ca6bd104cc7d68dcc7d57cc42912bef92f6b03047251d99"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, - "plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, - "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"}, - "postgrex": {:hex, :postgrex, "0.17.5", "0483d054938a8dc069b21bdd636bf56c487404c241ce6c319c1f43588246b281", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "50b8b11afbb2c4095a3ba675b4f055c416d0f3d7de6633a595fc131a828a67eb"}, - "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "recase": {:hex, :recase, "0.7.0", "3f2f719f0886c7a3b7fe469058ec539cb7bbe0023604ae3bce920e186305e5ae", [:mix], [], "hexpm", "36f5756a9f552f4a94b54a695870e32f4e72d5fad9c25e61bc4a3151c08a4e0c"}, - "sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, - "styler": {:hex, :styler, "0.11.9", "2595393b94e660cd6e8b582876337cc50ff047d184ccbed42fdad2bfd5d78af5", [:mix], [], "hexpm", "8b7806ba1fdc94d0a75127c56875f91db89b75117fcc67572661010c13e1f259"}, - "sweet_xml": {:hex, :sweet_xml, "0.7.4", "a8b7e1ce7ecd775c7e8a65d501bc2cd933bff3a9c41ab763f5105688ef485d08", [:mix], [], "hexpm", "e7c4b0bdbf460c928234951def54fe87edf1a170f6896675443279e2dbeba167"}, - "swoosh": {:hex, :swoosh, "1.15.3", "5c3f05b6e4e08cd4f75ad7e90db3c2b73c9d9de00503cce36a694951c2d69185", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.4 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "97a667b96ca8cc48a4679f6cd1f40a36d8701cf052587298473614caa70f164a"}, - "tailwind": {:hex, :tailwind, "0.2.2", "9e27288b568ede1d88517e8c61259bc214a12d7eed271e102db4c93fcca9b2cd", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "ccfb5025179ea307f7f899d1bb3905cd0ac9f687ed77feebc8f67bdca78565c4"}, - "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, - "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"}, - "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, - "thousand_island": {:hex, :thousand_island, "1.3.5", "6022b6338f1635b3d32406ff98d68b843ba73b3aa95cfc27154223244f3a6ca5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2be6954916fdfe4756af3239fb6b6d75d0b8063b5df03ba76fd8a4c87849e180"}, - "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, - "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, - "waffle": {:hex, :waffle, "1.1.8", "9257275a10e7b58f968bf891d2433ecaeced801edc064b3c100dc510848b9760", [:mix], [{:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:ex_aws_s3, "~> 2.1", [hex: :ex_aws_s3, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "30f1b00998ddb626d98f014bb7606173ff18610b1e89431ff84442dc1c94c6cd"}, + "plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"}, + "plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"}, + "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, + "swoosh": {:hex, :swoosh, "1.17.3", "5cda7bff6bc1121cc5b58db8ed90ef33261b373425ae3e32dd599688037a0482", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "14ad57cfbb70af57323e17f569f5840a33c01f8ebc531dd3846beef3c9c95e55"}, + "tailwind": {:hex, :tailwind, "0.2.4", "5706ec47182d4e7045901302bf3a333e80f3d1af65c442ba9a9eed152fb26c2e", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "c6e4a82b8727bab593700c998a4d98cf3d8025678bfde059aed71d0000c3e463"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, + "telemetry_metrics": {:hex, :telemetry_metrics, "1.0.0", "29f5f84991ca98b8eb02fc208b2e6de7c95f8bb2294ef244a176675adc7775df", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f23713b3847286a534e005126d4c959ebcca68ae9582118ce436b521d1d47d5d"}, + "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"}, + "thousand_island": {:hex, :thousand_island, "1.3.7", "1da7598c0f4f5f50562c097a3f8af308ded48cd35139f0e6f17d9443e4d0c9c5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0139335079953de41d381a6134d8b618d53d084f558c734f2662d1a72818dd12"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, - "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"}, - "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, - "yaml_elixir": {:hex, :yaml_elixir, "2.9.0", "9a256da867b37b8d2c1ffd5d9de373a4fda77a32a45b452f1708508ba7bbcb53", [:mix], [{:yamerl, "~> 0.10", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "0cb0e7d4c56f5e99a6253ed1a670ed0e39c13fc45a6da054033928607ac08dfc"}, + "websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"}, } diff --git a/app/priv/gettext/errors.pot b/app/priv/gettext/errors.pot index ccf5c68..eef2de2 100644 --- a/app/priv/gettext/errors.pot +++ b/app/priv/gettext/errors.pot @@ -7,7 +7,6 @@ ## Run `mix gettext.extract` to bring this file up to ## date. Leave `msgstr`s empty as changing them here has no ## effect: edit them in PO (`.po`) files instead. - ## From Ecto.Changeset.cast/4 msgid "can't be blank" msgstr "" diff --git a/app/priv/repo/migrations/20230524210513_create_users.exs b/app/priv/repo/migrations/20230524210513_create_users.exs deleted file mode 100644 index b74837a..0000000 --- a/app/priv/repo/migrations/20230524210513_create_users.exs +++ /dev/null @@ -1,39 +0,0 @@ -defmodule Bubbli.Repo.Migrations.CreateUsers do - use Ecto.Migration - - def change do - create table(:users, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:email, :string, null: false) - add(:is_active, :boolean, default: false, null: false) - - # cryptography - # NOTE(bianchi): stored as binary blogs (independent of encoding) - add(:master_public_key, :bytea) - add(:root_password_hash, :bytea) - - # user attributes - add(:display_name, :string) - add(:username, :string) - # additional profile deets? - - timestamps() - end - - create(unique_index(:users, [:email])) - # TODO: fix index - # create(index(:users, [:encrypted_master_private_keys], using: "GIN")) - - create table(:users_tokens, primary_key: false) do - add :id, :binary_id, primary_key: true - add :user_id, references(:users, type: :binary_id, on_delete: :delete_all), null: false - add :token, :binary, null: false - add :context, :string, null: false - add :sent_to, :string - timestamps(updated_at: false) - end - - create index(:users_tokens, [:user_id]) - create unique_index(:users_tokens, [:context, :token]) - end -end diff --git a/app/priv/repo/migrations/20230525201405_add_client_keys_table.exs b/app/priv/repo/migrations/20230525201405_add_client_keys_table.exs deleted file mode 100644 index c1473c5..0000000 --- a/app/priv/repo/migrations/20230525201405_add_client_keys_table.exs +++ /dev/null @@ -1,20 +0,0 @@ -defmodule Bubbli.Repo.Migrations.AddClientKeysTable do - use Ecto.Migration - - def change do - create table(:client_keys, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:type, :string, null: false) - add(:key_algorithm, :jsonb, null: false) - add(:wrap_algorithm, :jsonb, null: false) - add(:key_usages, :jsonb, null: false) - add(:protected_private_key, :bytea, null: false) - - add(:user_id, references(:users, type: :uuid), null: false) - - timestamps() - end - - create(index(:client_keys, [:user_id])) - end -end diff --git a/app/priv/repo/migrations/20231113010147_add_timelines.exs b/app/priv/repo/migrations/20231113010147_add_timelines.exs deleted file mode 100644 index a2a8b0e..0000000 --- a/app/priv/repo/migrations/20231113010147_add_timelines.exs +++ /dev/null @@ -1,44 +0,0 @@ -defmodule Bubbli.Repo.Migrations.AddTimelines do - use Ecto.Migration - - def change do - # belongs_to users or groups - create table(:timelines, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:type, :string, null: false) - add(:user_id, references(:users, type: :uuid)) - # add(:group_id, references(:groups, type: :uuid)) - - timestamps() - end - - create index(:timelines, [:user_id]) - # create index(:timelines, [:group_id]) - - # belongs_to timelines or chats - # I feel like this is a useful construct but I can't think of it's use case - # right now. I'll keep it in here because it's not causing harm - create table(:encryption_contexts, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:timeline_id, references(:timelines, type: :uuid), null: false) - - timestamps() - end - - create table(:encryption_keys, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:key_algorithm, :jsonb, null: false) - add(:wrap_algorithm, :jsonb, null: false) - add(:key_usages, :jsonb, null: false) - add(:protected_encryption_key, :bytea, null: false) - - add(:user_id, references(:users, type: :uuid), null: false) - add(:encryption_context_id, references(:encryption_contexts, type: :uuid), null: false) - - timestamps() - end - - create index(:encryption_keys, [:user_id]) - create index(:encryption_keys, [:user_id, :encryption_context_id]) - end -end diff --git a/app/priv/repo/migrations/20231128035851_add_posts.exs b/app/priv/repo/migrations/20231128035851_add_posts.exs deleted file mode 100644 index d6dd8aa..0000000 --- a/app/priv/repo/migrations/20231128035851_add_posts.exs +++ /dev/null @@ -1,20 +0,0 @@ -defmodule Bubbli.Repo.Migrations.AddPosts do - use Ecto.Migration - - def change do - create table(:posts, primary_key: false) do - add(:id, :uuid, primary_key: true) - add(:deleted_at, :utc_datetime) - - add(:protected_content, :bytea, null: false) - add(:encryption_algorithm, :map) - add(:author_id, references(:users, type: :uuid), null: false) - add(:timeline_id, references(:timelines, type: :uuid), null: false) - - timestamps() - end - - create index(:posts, [:author_id]) - create index(:posts, [:timeline_id]) - end -end diff --git a/app/priv/repo/seeds.exs b/app/priv/repo/seeds.exs index 5db3520..e9fc09d 100644 --- a/app/priv/repo/seeds.exs +++ b/app/priv/repo/seeds.exs @@ -9,16 +9,3 @@ # # We recommend using the bang functions (`insert!`, `update!` # and so on) as they will fail if something goes wrong. - -alias Bubbli.Repo -alias BubbliSchema.User - -# defmodule Seeds do -# def setup_global_seeds(), do: nil -# end -# -# Seeds.setup_global_seeds() - -# Repo.insert!(%User{ -# email: "test@example.com" -# }) diff --git a/app/priv/static/favicon.ico b/app/priv/static/favicon.ico index 73de524..7f372bf 100644 Binary files a/app/priv/static/favicon.ico and b/app/priv/static/favicon.ico differ diff --git a/app/priv/static/images/logo.svg b/app/priv/static/images/logo.svg new file mode 100644 index 0000000..9f26bab --- /dev/null +++ b/app/priv/static/images/logo.svg @@ -0,0 +1,6 @@ + diff --git a/app/test/bubbli/accounts_test.exs b/app/test/bubbli/accounts_test.exs deleted file mode 100644 index 1cfee6a..0000000 --- a/app/test/bubbli/accounts_test.exs +++ /dev/null @@ -1,78 +0,0 @@ -defmodule Bubbli.AccountsTest do - use Bubbli.DataCase - - import BubbliFixtures.AccountsFixtures - - alias BubbliSchema.User - - describe "users" do - @create_attrs %{ - email: "testabcd@example.com", - is_active: true, - display_name: "test", - username: "test", - master_public_key: "test", - client_keys: [], - timeline_key_map: %{ - key_algorithm: %{}, - wrap_algorithm: %{}, - key_usages: [], - protected_encryption_key: "test" - }, - salt: "testtesttesttest", - root_password_hash: "test" - } - @invalid_attrs %{email: nil, is_active: nil} - - test "list_users/0 returns all users" do - user = user_fixture() - assert Bubbli.list_users() == [user] - end - - test "register_user/1 creates a user" do - assert {:ok, %User{} = user} = Bubbli.register_user(@create_attrs) - assert user == Bubbli.get_user!(user.id, [:home_timeline, home_timeline: :encryption_context]) - end - - test "get_user!/1 returns the user with given id" do - user = user_fixture() - assert Bubbli.get_user!(user.id) == user - end - - test "update_user/2 with valid data updates the user" do - user = user_fixture() - update_attrs = %{email: "someupdated@email", is_active: false} - - assert {:ok, %User{} = user} = Bubbli.update_user(user, update_attrs) - assert user.email == "someupdated@email" - assert user.is_active == false - end - - test "update_user/2 with invalid data returns error changeset" do - user = user_fixture() - assert {:error, %Ecto.Changeset{}} = Bubbli.update_user(user, @invalid_attrs) - assert user == Bubbli.get_user!(user.id) - end - - test "delete_user/1 deletes the user" do - user = user_fixture() - assert {:ok, %User{}} = Bubbli.delete_user(user) - assert_raise Ecto.NoResultsError, fn -> Bubbli.get_user!(user.id) end - end - - test "change_user/1 returns a user changeset" do - user = user_fixture() - assert %Ecto.Changeset{} = Bubbli.change_user(user) - end - end - - describe "create_user_api_token/1 and fetch_user_by_api_token/1" do - test "creates and fetches by token" do - user = user_fixture() - token = Bubbli.create_user_api_token(user) - assert {:ok, fetched_user} = Bubbli.fetch_user_by_api_token(token) - assert fetched_user.id == user.id - assert Bubbli.fetch_user_by_api_token("invalid") == :error - end - end -end diff --git a/app/test/bubbli/posts_test.exs b/app/test/bubbli/posts_test.exs deleted file mode 100644 index c53c5cf..0000000 --- a/app/test/bubbli/posts_test.exs +++ /dev/null @@ -1,73 +0,0 @@ -defmodule Bubbli.PostsTest do - use Bubbli.DataCase - - alias Bubbli.Factory - alias Bubbli.Posts - - setup do - user = BubbliFixtures.AccountsFixtures.user_registration_fixture() - user = Repo.preload(user, :home_timeline) - post = Factory.insert!(:post, author_id: user.id, timeline_id: user.home_timeline.id) - {:ok, user: user, post: post} - - {:ok, %{post: post, user: user}} - end - - test "fails creating post with missing attributes" do - post_attrs = %{protected_content: Faker.Lorem.paragraph()} - assert {:error, %{valid?: false}} = Posts.create_post(post_attrs) - end - - test "create valid post", ctx do - post_attrs = %{ - protected_content: Faker.Lorem.paragraph(), - author_id: ctx.user.id, - timeline_id: ctx.user.home_timeline.id, - encryption_algorithm: %{} - } - - assert {:ok, _post} = Posts.create_post(post_attrs) - end - - test "create deleted post", ctx do - post_attrs = %{ - protected_content: Faker.Lorem.paragraph(), - author_id: ctx.user.id, - timeline_id: ctx.user.home_timeline.id, - deleted_at: DateTime.truncate(DateTime.utc_now(), :second), - encryption_algorithm: %{} - } - - assert {:ok, _post} = Posts.create_post(post_attrs) - end - - test "fails to create post with invalid author", ctx do - post_attrs = %{ - protected_content: Faker.Lorem.paragraph(), - author_id: Faker.UUID.v4(), - timeline_id: ctx.user.home_timeline.id, - encryption_algorithm: %{} - } - - assert {:error, changeset} = Posts.create_post(post_attrs) - assert {"does not exist", _} = changeset.errors[:author_id] - end - - test "fails to create post with invalid timeline", ctx do - post_attrs = %{ - protected_content: Faker.Lorem.paragraph(), - author_id: ctx.user.id, - encryption_algorithm: %{}, - timeline_id: Faker.UUID.v4() - } - - assert {:error, changeset} = Posts.create_post(post_attrs) - assert {"does not exist", _} = changeset.errors[:timeline_id] - end - - test "fails to create post with invalid protected_content", ctx do - post_attrs = %{author_id: ctx.user.id, timeline_id: ctx.user.home_timeline.id, protected_content: nil} - assert {:error, changeset} = Posts.create_post(post_attrs) - assert {"can't be blank", _} = changeset.errors[:protected_content] - end -end diff --git a/app/test/bubbli_web/controllers/error_html_test.exs b/app/test/bubbli_web/controllers/error_html_test.exs new file mode 100644 index 0000000..9585fc5 --- /dev/null +++ b/app/test/bubbli_web/controllers/error_html_test.exs @@ -0,0 +1,14 @@ +defmodule BubbliWeb.ErrorHTMLTest do + use BubbliWeb.ConnCase, async: true + + # Bring render_to_string/4 for testing custom views + import Phoenix.Template + + test "renders 404.html" do + assert render_to_string(BubbliWeb.ErrorHTML, "404", "html", []) == "Not Found" + end + + test "renders 500.html" do + assert render_to_string(BubbliWeb.ErrorHTML, "500", "html", []) == "Internal Server Error" + end +end diff --git a/app/test/bubbli_web/controllers/error_json_test.exs b/app/test/bubbli_web/controllers/error_json_test.exs index 3edd52d..0b5f871 100644 --- a/app/test/bubbli_web/controllers/error_json_test.exs +++ b/app/test/bubbli_web/controllers/error_json_test.exs @@ -2,11 +2,11 @@ defmodule BubbliWeb.ErrorJSONTest do use BubbliWeb.ConnCase, async: true test "renders 404" do - assert BubbliWeb.ErrorJSON.render("404.json", %{}) == %{errors: %{message: "Not Found"}} + assert BubbliWeb.ErrorJSON.render("404.json", %{}) == %{errors: %{detail: "Not Found"}} end test "renders 500" do assert BubbliWeb.ErrorJSON.render("500.json", %{}) == - %{errors: %{message: "Internal Server Error"}} + %{errors: %{detail: "Internal Server Error"}} end end diff --git a/app/test/bubbli_web/controllers/page_controller_test.exs b/app/test/bubbli_web/controllers/page_controller_test.exs new file mode 100644 index 0000000..4fb911f --- /dev/null +++ b/app/test/bubbli_web/controllers/page_controller_test.exs @@ -0,0 +1,8 @@ +defmodule BubbliWeb.PageControllerTest do + use BubbliWeb.ConnCase + + test "GET /", %{conn: conn} do + conn = get(conn, ~p"/") + assert html_response(conn, 200) =~ "Peace of mind from prototype to production" + end +end diff --git a/app/test/bubbli_web/controllers/posts_controller_test.exs b/app/test/bubbli_web/controllers/posts_controller_test.exs deleted file mode 100644 index aa92e82..0000000 --- a/app/test/bubbli_web/controllers/posts_controller_test.exs +++ /dev/null @@ -1,39 +0,0 @@ -defmodule BubbliWeb.PostsControllerTest do - use BubbliWeb.ConnCase, async: true - - import BubbliFixtures.AccountsFixtures - - def log_in_user(%{conn: conn}) do - user = user_registration_fixture() - token = Bubbli.create_user_api_token(user) - conn = put_req_cookie(conn, "authorization", token) - %{conn: conn, timeline: user.home_timeline} - end - - describe "when user is logged in" do - setup [:log_in_user] - - test "returns a 200 on valid attributes for a users own timeline", %{conn: conn, timeline: timeline} do - post_attrs = %{ - protected_content: Base.encode64(Faker.Lorem.paragraph()), - author_id: timeline.user_id, - timeline_id: timeline.id, - encryption_algorithm: %{} - } - - conn = post(conn, ~p"/api/v1/timelines/#{timeline.id}/posts", post_attrs) - assert json_response(conn, 200)["success"] - end - - test "returns a 400 if missing attributes", %{conn: conn} do - conn = post(conn, ~p"/api/v1/timelines/home/posts", %{}) - assert json_response(conn, 400)["errors"] == %{"message" => "Bad Request"} - end - - # TODO: test authorization - # test "returns a 403 if posting on a timeline of an unconnected entity", %{conn: conn} do - # conn = post(conn, ~p"/api/v1/timelines/abc123/posts", %{}) - # assert json_response(conn, 403)["errors"] == ["forbidden"] - # end - end -end diff --git a/app/test/bubbli_web/controllers/registration_controller_test.exs b/app/test/bubbli_web/controllers/registration_controller_test.exs deleted file mode 100644 index 237e170..0000000 --- a/app/test/bubbli_web/controllers/registration_controller_test.exs +++ /dev/null @@ -1,59 +0,0 @@ -defmodule BubbliWeb.RegistrationControllerTest do - use BubbliWeb.ConnCase, async: true - - import BubbliFixtures.AccountsFixtures - - @valid_attrs %{ - email: "test@example.com", - display_name: "Test User", - username: "testuser", - public_key: sample_public_key(), - client_keys: [ - %{ - protected_private_key: Base.encode64("private_key"), - type: "password", - key_algorithm: %{}, - wrap_algorithm: %{}, - key_usages: [] - } - ], - timeline_key: %{ - protected_encryption_key: Base.encode64("encrypted_timeline_key"), - key_algorithm: %{}, - wrap_algorithm: %{}, - key_usages: [] - }, - root_password_hash: Base.encode64("password_hash") - } - @invalid_attrs %{} - - setup do - conn = build_conn() - {:ok, conn: conn} - end - - describe "register" do - test "verifies user already exist", %{conn: conn} do - _existing_user = user_fixture(@valid_attrs) - conn = post(conn, ~p"/api/v1/auth/register", @valid_attrs) - assert json_response(conn, 409)["success"] == false - assert json_response(conn, 409)["errors"] == ["email_already_registered"] - end - - test "returns an ok if user does not already exist", %{conn: conn} do - conn = post(conn, ~p"/api/v1/auth/register", @valid_attrs) - assert json_response(conn, 200)["success"] - end - - test "with a malformatted public key", %{conn: conn} do - attrs = Map.put(@valid_attrs, :public_key, "test") - conn = post(conn, ~p"/api/v1/auth/register", attrs) - assert json_response(conn, 400)["errors"] == %{"message" => "invalid public key"} - end - - test "with invalid attributes", %{conn: conn} do - conn = post(conn, ~p"/api/v1/auth/register", @invalid_attrs) - assert json_response(conn, 400) - end - end -end diff --git a/app/test/support/conn_case.ex b/app/test/support/conn_case.ex index 43daec8..895c026 100644 --- a/app/test/support/conn_case.ex +++ b/app/test/support/conn_case.ex @@ -20,14 +20,14 @@ defmodule BubbliWeb.ConnCase do using do quote do # The default endpoint for testing + @endpoint BubbliWeb.Endpoint + use BubbliWeb, :verified_routes # Import conveniences for testing with connections - import BubbliWeb.ConnCase - import Phoenix.ConnTest import Plug.Conn - - @endpoint BubbliWeb.Endpoint + import Phoenix.ConnTest + import BubbliWeb.ConnCase end end @@ -35,36 +35,4 @@ defmodule BubbliWeb.ConnCase do Bubbli.DataCase.setup_sandbox(tags) {:ok, conn: Phoenix.ConnTest.build_conn()} end - - # @doc """ - # Setup helper that registers and logs in users. - - # setup :register_and_log_in_user - - # It stores an updated connection and a registered user in the - # test context. - # """ - # def register_and_log_in_user(%{conn: conn}) do - # user = BubbliFixtures.AccountsFixtures.user_fixture() - # %{conn: log_in_user(conn, user), user: user} - # end - - # @doc """ - # Logs the given `user` into the `conn`. - - # It returns an updated `conn`. - # """ - # def log_in_user(conn, user) do - # token = Bubbli.generate_user_session_token(user) - - # conn - # |> Phoenix.ConnTest.init_test_session(%{}) - # |> Plug.Conn.put_session(:user_token, token) - # end - - def log_in_api_user(conn, user) do - token = Bubbli.create_user_api_token(user) - - Plug.Conn.put_resp_header(conn, "authorization", token) - end end diff --git a/app/test/support/data_case.ex b/app/test/support/data_case.ex index 50ad9f1..ac2b9b3 100644 --- a/app/test/support/data_case.ex +++ b/app/test/support/data_case.ex @@ -18,12 +18,12 @@ defmodule Bubbli.DataCase do using do quote do - import Bubbli.DataCase + alias Bubbli.Repo + import Ecto import Ecto.Changeset import Ecto.Query - - alias Bubbli.Repo + import Bubbli.DataCase end end diff --git a/app/test/support/factory.ex b/app/test/support/factory.ex deleted file mode 100644 index fcdad91..0000000 --- a/app/test/support/factory.ex +++ /dev/null @@ -1,20 +0,0 @@ -defmodule Bubbli.Factory do - @moduledoc false - alias Bubbli.Repo - - def build(:user) do - %BubbliSchema.User{} - end - - def build(:post) do - %BubbliSchema.Post{protected_content: Faker.Lorem.paragraph()} - end - - def build(factory_name, attrs) do - factory_name |> build() |> struct!(attrs) - end - - def insert!(factory_name, attrs \\ []) do - factory_name |> build(attrs) |> Repo.insert!() - end -end diff --git a/app/test/support/fixtures/accounts_fixtures.ex b/app/test/support/fixtures/accounts_fixtures.ex deleted file mode 100644 index 6d424f6..0000000 --- a/app/test/support/fixtures/accounts_fixtures.ex +++ /dev/null @@ -1,72 +0,0 @@ -defmodule BubbliFixtures.AccountsFixtures do - @moduledoc """ - This module defines test helpers for creating - entities via the `Bubbli.Accounts` context. - """ - - use Boundary, check: [in: false, out: false] - - @client_key_params [ - %{ - type: "password", - protected_private_key: "foobar", - key_algorithm: %{}, - wrap_algorithm: %{}, - key_usages: [] - } - ] - - @doc """ - Generate a unique user email. - """ - def unique_user_email, do: "someemail#{System.unique_integer([:positive])}@example.com" - - # TODO: refactor into Bubbli.Factory - @doc """ - Generate a user. - """ - def user_fixture(attrs \\ %{}) do - {:ok, user} = - attrs - |> Enum.into(%{ - email: unique_user_email(), - display_name: "test", - username: "test", - is_active: true, - salt: "testsalt", - root_password_hash: Base.encode64("foobar"), - encrypted_master_private_keys: %{"ckey_1234" => "test"}, - master_public_key: "test" - }) - |> Bubbli.Accounts.create_user() - - user - end - - def user_registration_fixture(attrs \\ %{}) do - {:ok, user} = - attrs - |> Enum.into(%{ - email: unique_user_email(), - client_keys: @client_key_params, - username: Faker.Internet.user_name(), - display_name: "test mctesterson", - salt: Argon2.Base.gen_salt(), - root_password_hash: "foobar", - master_public_key: sample_public_key(), - timeline_key_map: %{ - protected_encryption_key: "test", - key_algorithm: %{}, - wrap_algorithm: %{}, - key_usages: [] - } - }) - |> Bubbli.Accounts.register_user() - - user - end - - def sample_public_key do - "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxKDgo5Kaz9FnPLdAHH73XX3abSde5p7iRKyPOYfXVTAdKRbWehH1esGm+grmjmqgo3FJKlLV8nN85OZYn+ktvsFXwjLRQYrG6zzsg0ke9RgMKfDW570TXaNYgXS1iEU9YB8LoCfbkFGzStxHjIIr8cB+sfFKd2xYFZ4yV7MpNEJ2LWX+uVE0HB/J4RYVBA7JS/YfDt1hDHL8UUhArVZv/3S2gfXjAhzfbZj1UJE1WnN2DMrrobnGToIVz//OD7i00bh61FYbqnS59HuKdWqXyRvJDaMcBaaAk6358NgsbOGRf6QLWieuQ7RAb88z8qklpQhuhUQhjZmNCREUKifpV58WFEd+59mGfRsJE84ejpbgZtrU8ZAY9k7pkdtfU8Wj9zILEObKLshHLy2QSNwwxy7WWNEFb3FKENFkUjh4HlGUHf9PSml03vujuOQFxtWOlxoR9hkha0Y7aK/2cHME4170fM0jxcXb4Hv9S3pJVmamQMPZPs/x6+0zXSHPDsrlL76AEj8nNlAZD6UQNcotuxR9GkKUjbPrQ35mrJpGOE0E6/Lo+8unaoSOJWEo65WV7P42V7oEifGRJ0J+IUVit8e5krEeFaZ6SbOhF3IP1TyHS+kfDiUdrl2Y3dMWFtAq8iOQ1Ea5hgq3i2uzHGjT+KVLjhCsBUT87zqck+hjid8CAwEAAQ==\n-----END PUBLIC KEY-----" - end -end diff --git a/app/test/test_helper.exs b/app/test/test_helper.exs index 8e6dfaf..9e5d8bf 100644 --- a/app/test/test_helper.exs +++ b/app/test/test_helper.exs @@ -1,3 +1,2 @@ ExUnit.start() -Faker.start() Ecto.Adapters.SQL.Sandbox.mode(Bubbli.Repo, :manual) diff --git a/app/yahr.yaml b/app/yahr.yaml deleted file mode 100644 index db6a6d1..0000000 --- a/app/yahr.yaml +++ /dev/null @@ -1,24 +0,0 @@ -requests: - local: - host: localhost:4000 - scheme: http - requests: - registration_start: - path: /api/v1/registration/start - method: post - payload: - email: "test26@example.com" - headers: - Content-Type: "application/json" - registration_finish: - path: /api/v1/registration/confirm - method: post - payload: - email: "test26@example.com" - challenge: "Pauum46zxK6AvDxydC4W63WNe09lwyaRzAgvE0vQA7c=" - signed_challenge: "Qnt4NRknH2zGg89q1hqrLnlZULUAMCsQ1fgkJSo4bhC1vKgx3Jk3YLJNK1wcWM2ENvILE+4B8y5J1Xs54DJXb/J1DYJB1WN2dZsHYTxq17YtaDBsjbhzajwX609Xkg9W" - protected_private_key: "kdyUpy9SyH5hQmducs9VWgMlxhvqAMdJbJAmQVWzeHg3iQlGMuKwRizrTiI7mZtZPqTloZ82EWS4Dje62Y+kj0rSucRTer9sFLfKk5mfnFNgbl07I6RS0nilzWQi6Xa0PmZGxNK+pbe8ezRLCn3fVoztHJiVZkRuINo788vo7NOWt9ClJn9g4KhAzlVJsqaVhUxqEG1Kqf/vK+ASBN/a2cG4c1Rr/N0P0jTNJhgQUNBC0HxiQ3McHcwnavwejAklqj+xXc2tMj1E" - public_key: "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAErgziC/r9/zxiIzawbiUkhMAfaAZxuvv5qw2BEt52aiKP6KsO7pqajq5L3atGMMnLwjAnEyCcKgYJYZQCcv883k+CBa13OQZPsh2DftQSwDjBYyiKHLcUFXWsTMSOaAnn\n-----END PUBLIC KEY-----" - salt: "u8xQdrBRSJfcxrxHX1v9rVGjWleEhjz7zQtIknSK6z8=" - headers: - Content-Type: "application/json" diff --git a/ci/main.go b/ci/main.go deleted file mode 100644 index 5062a71..0000000 --- a/ci/main.go +++ /dev/null @@ -1,66 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - - "dagger.io/dagger" -) - -// TODO(bianchi): break up the CI -// https://github.com/thechangelog/changelog.com/blob/master/magefiles/image/test.go - -func main() { - ctx := context.Background() - - // initialize Dagger client - client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout)) - if err != nil { - panic(err) - } - defer client.Close() - - // set up postgres container for testing - postgres := client.Container(). - From("postgres:15-alpine"). - WithEnvVariable("POSTGRES_USER", "postgres"). - WithEnvVariable("POSTGRES_PASSWORD", "postgres"). - WithExposedPort(5432). - AsService() - - // set up elixir container - // TODO(bianchi): read versions from .mise.toml - elixir := client.Container(). - From("elixir:1.16"). // slim doesn't have make installed - should we use elixir or hexpm/elixir? - WithDirectory("/app", client.Host().Directory("app"), dagger.ContainerWithDirectoryOpts{ - Exclude: []string{"app/priv/", "app/build/", "app/deps/", "app/doc/", "ci/", "web"}, - }) - - depsCache := client.CacheVolume("deps") - buildCache := client.CacheVolume("build") - - // set the working directory in the container - // install application dependencies - runner := elixir. - WithServiceBinding("db", postgres). - WithEnvVariable("DB_HOST", "db"). - WithEnvVariable("MIX_ENV", "test"). - WithWorkdir("/app"). - WithMountedCache("/app/deps", depsCache). - WithMountedCache("/app/_build", buildCache). - WithExec([]string{"mix", "local.hex", "--force"}). - WithExec([]string{"mix", "deps.get"}). - WithExec([]string{"mix", "deps.compile"}) - - // TODO(bianchi): https://docs.dagger.io/7442989/cookbook/#perform-multi-stage-build - - // run application tests - out, err := runner. - WithExec([]string{"mix", "test"}). - Stderr(ctx) - if err != nil { - panic(err) - } - fmt.Println(out) -} diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..69d7ea4 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,12 @@ +services: + postgres: + image: postgres:17 + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD: postgres + volumes: + - pgdata:/var/lib/postgresql/data + +volumes: + pgdata: diff --git a/encryption-scheme.mmd b/encryption-scheme.mmd deleted file mode 100644 index 43572a1..0000000 --- a/encryption-scheme.mmd +++ /dev/null @@ -1,73 +0,0 @@ -flowchart LR - %% Variables - PW{{User Password}} - style PW fill:#f9f,stroke:#333,stroke-width:4px - - PWARGON[" - fa:fa-lock Argon2id PBKDF - Hash Length: 512 bits (64 bytes) - M: 64MiB - I: 3 - P: 4 - Salt: Randomly Generated - Payload: Password - "] - - MASTER{{fa:fa-key Master Encryption Key}} - style MASTER fill:#0FF,stroke:#333,stroke-width:4px - - PWHASH{{fa:fa-shield-alt Master Password Hash}} - style PWHASH fill:#0FF,stroke:#333,stroke-width:4px - - KEYWRAP[" - fa:fa-lock AES-256 bit Encryption - IV: Initialization Vector - Payload: Private Key - Key: Master Encryption Key - "] - GENAKEY[" - fa:fa-random Generate Asymmetric Key Pair - Algorithm: RSA-OAEP - Modulus Length: 4096 - "] - WRAPPEDAKEY{{fa:fa-shield-alt Protected/Wrapped Private Key}} - style WRAPPEDAKEY fill:#0FF,stroke:#333,stroke-width:4px - WRAPCONTEXTKEY[" - fa:fa-key RSA Public Key Encryption - Payload: Encryption Context Symmetric Key - Key: Public Key - "] - GENSKEY[" - fa:fa-random Generate Encryption Context Symmetric Key - Encryption Key: 256 bits - "] - WRAPPEDSKEY{{fa:fa-shield-alt Protected Encryption Context Key}} - style WRAPPEDSKEY fill:#0FF,stroke:#333,stroke-width:4px - - DB[(Database)] - SERVERARGON[" - fa:fa-lock Argon2id Hash - Hash Length: 256 bits (32 bytes) - M: 64MiB - I: 3 - P: 4 - Salt: Generated Salt - Payload: Master Password Hash - "] - - subgraph Client - style Client fill:#FFF - PW --> PWARGON - PWARGON -- "Key Split\nFirst 256 bits" --> MASTER - PWARGON -- "Key Split\nLast 256 bits" --> PWHASH - MASTER --> KEYWRAP - GENAKEY -- Private Key --> KEYWRAP - GENAKEY -- Public Key --> WRAPCONTEXTKEY - KEYWRAP --> WRAPPEDAKEY - GENSKEY --> WRAPCONTEXTKEY - WRAPCONTEXTKEY--> WRAPPEDSKEY - end - - subgraph Server - style Server fill:#FFF - PWHASH --> SERVERARGON - WRAPPEDAKEY --> DB - WRAPPEDSKEY --> DB - SERVERARGON --> DB - end diff --git a/go.mod b/go.mod deleted file mode 100644 index 1114076..0000000 --- a/go.mod +++ /dev/null @@ -1,19 +0,0 @@ -module main - -go 1.20 - -require dagger.io/dagger v0.9.5 - -require ( - github.com/99designs/gqlgen v0.17.31 // indirect - github.com/Khan/genqlient v0.6.0 // indirect - github.com/adrg/xdg v0.4.0 // indirect - github.com/iancoleman/strcase v0.2.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/vektah/gqlparser/v2 v2.5.6 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/mod v0.13.0 // indirect - golang.org/x/sync v0.4.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/tools v0.14.0 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 59561ea..0000000 --- a/go.sum +++ /dev/null @@ -1,60 +0,0 @@ -dagger.io/dagger v0.7.3 h1:3DJ3b2l2g1E6UoDHqkylELy98MyKju82Hj7B2q+0W+Q= -dagger.io/dagger v0.7.3/go.mod h1:1bvuGds3VUv3sdgkwoNKhSymNyqsjF8JZvZw7bmwBKs= -dagger.io/dagger v0.9.5 h1:44ypKgOjKZKrzqHSoa/wIfqnrSZM87tuoAKJpo5tGV4= -dagger.io/dagger v0.9.5/go.mod h1:ic2UD6gS5iBp2e6VWPxyb7h6VpAyhFN6U7/TDlriox8= -github.com/99designs/gqlgen v0.17.31 h1:VncSQ82VxieHkea8tz11p7h/zSbvHSxSDZfywqWt158= -github.com/99designs/gqlgen v0.17.31/go.mod h1:i4rEatMrzzu6RXaHydq1nmEPZkb3bKQsnxNRHS4DQB4= -github.com/Khan/genqlient v0.6.0 h1:Bwb1170ekuNIVIwTJEqvO8y7RxBxXu639VJOkKSrwAk= -github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4DpWWCRM= -github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= -github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= -github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= -github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= -github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU= -github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= -golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= -golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/web/.eslintignore b/web/.eslintignore deleted file mode 100644 index 3897265..0000000 --- a/web/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs deleted file mode 100644 index 4b29a01..0000000 --- a/web/.eslintrc.cjs +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier' - ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'] - }, - env: { - browser: true, - es2017: true, - node: true - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - } - } - ] -}; diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 300d4ef..0000000 --- a/web/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example -vite.config.js.timestamp-* -vite.config.ts.timestamp-* -coverage/ -/test-results/ -/playwright-report/ -/blob-report/ -/playwright/.cache/ diff --git a/web/.npmrc b/web/.npmrc deleted file mode 100644 index 0c05da4..0000000 --- a/web/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -engine-strict=true -resolution-mode=highest diff --git a/web/.prettierignore b/web/.prettierignore deleted file mode 100644 index 3897265..0000000 --- a/web/.prettierignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/web/.prettierrc b/web/.prettierrc deleted file mode 100644 index caf5ef1..0000000 --- a/web/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "tabWidth": 2, - "useTabs": false, - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] -} diff --git a/web/.vscode/settings.json b/web/.vscode/settings.json deleted file mode 100644 index e072620..0000000 --- a/web/.vscode/settings.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "prettier.documentSelectors": ["**/*.svelte"], - "tailwindCSS.classAttributes": [ - "class", - "accent", - "active", - "aspectRatio", - "background", - "badge", - "bgBackdrop", - "bgDark", - "bgDrawer", - "bgLight", - "blur", - "border", - "button", - "buttonAction", - "buttonBack", - "buttonClasses", - "buttonComplete", - "buttonDismiss", - "buttonNeutral", - "buttonNext", - "buttonPositive", - "buttonTextCancel", - "buttonTextConfirm", - "buttonTextFirst", - "buttonTextLast", - "buttonTextNext", - "buttonTextPrevious", - "buttonTextSubmit", - "caretClosed", - "caretOpen", - "chips", - "color", - "controlSeparator", - "controlVariant", - "cursor", - "display", - "element", - "fill", - "fillDark", - "fillLight", - "flex", - "gap", - "gridColumns", - "height", - "hover", - "indent", - "justify", - "meter", - "padding", - "position", - "regionBackdrop", - "regionBody", - "regionCaption", - "regionCaret", - "regionCell", - "regionChildren", - "regionCone", - "regionContent", - "regionControl", - "regionDefault", - "regionDrawer", - "regionFoot", - "regionFootCell", - "regionFooter", - "regionHead", - "regionHeadCell", - "regionHeader", - "regionIcon", - "regionInterface", - "regionInterfaceText", - "regionLabel", - "regionLead", - "regionLegend", - "regionList", - "regionNavigation", - "regionPage", - "regionPanel", - "regionRowHeadline", - "regionRowMain", - "regionSummary", - "regionSymbol", - "regionTab", - "regionTrail", - "ring", - "rounded", - "select", - "shadow", - "slotDefault", - "slotFooter", - "slotHeader", - "slotLead", - "slotMessage", - "slotMeta", - "slotPageContent", - "slotPageFooter", - "slotPageHeader", - "slotSidebarLeft", - "slotSidebarRight", - "slotTrail", - "spacing", - "text", - "track", - "width", - "zIndex" - ] -} diff --git a/web/README.md b/web/README.md deleted file mode 100644 index 5c91169..0000000 --- a/web/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm create svelte@latest - -# create a new project in my-app -npm create svelte@latest my-app -``` - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -To create a production version of your app: - -```bash -npm run build -``` - -You can preview the production build with `npm run preview`. - -> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/web/package-lock.json b/web/package-lock.json deleted file mode 100644 index 3d5e5c4..0000000 --- a/web/package-lock.json +++ /dev/null @@ -1,4984 +0,0 @@ -{ - "name": "front", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "front", - "version": "0.0.1", - "dependencies": { - "axios": "^1.6.7", - "svelte-autoresize-textarea": "^0.0.6" - }, - "devDependencies": { - "@floating-ui/dom": "^1.5.1", - "@playwright/test": "^1.42.1", - "@skeletonlabs/skeleton": "^1.11.0", - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.5.0", - "@tailwindcss/forms": "^0.5.4", - "@tailwindcss/typography": "^0.5.9", - "@types/node": "^20.11.28", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "@vitest/coverage-v8": "^0.34.1", - "autoprefixer": "^10.4.14", - "base64-js": "^1.5.1", - "bip39": "^3.1.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.26.0", - "hash-wasm": "^4.9.0", - "highlight.js": "^11.8.0", - "idb": "^7.1.1", - "lucide-svelte": "^0.268.0", - "postcss": "^8.4.27", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.8.1", - "session-keystore": "^1.0.3", - "svelte": "^3.54.0", - "svelte-check": "^3.0.1", - "svelte-i18n": "^3.7.0", - "sveltekit-superforms": "^1.6.0", - "tailwindcss": "^3.3.3", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.3.0", - "vitest": "^0.32.0", - "zod": "^3.22.2" - } - }, - "node_modules/@47ng/codec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@47ng/codec/-/codec-1.1.0.tgz", - "integrity": "sha512-gvtA2RjijvEiYQbURPM6/Z+ySfS4lmtQ9NovDzzT+5ekeZ3M5pGiotlT94Qd+At4AYwWp7mWJLvxFn3JR+BZbA==", - "dev": true, - "dependencies": { - "@stablelib/base64": "^1.0.1", - "@stablelib/hex": "^1.0.1" - }, - "engines": { - "node": ">=11" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", - "dev": true, - "dependencies": { - "@floating-ui/utils": "^0.1.1" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", - "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", - "dev": true, - "dependencies": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", - "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==", - "dev": true - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", - "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", - "dev": true, - "dependencies": { - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/fast-memoize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", - "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", - "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/icu-skeleton-parser": "1.3.6", - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", - "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", - "dev": true, - "dependencies": { - "playwright": "1.42.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@skeletonlabs/skeleton": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@skeletonlabs/skeleton/-/skeleton-1.11.0.tgz", - "integrity": "sha512-VdLdYT0Gm4zsVPjLM2cXjyBWJbo8Cxswf8RBsD5cjAP8E098D237WDgDQmV1JC6WYUY2OiEOLN4PV6S3LoF2dg==", - "dev": true, - "dependencies": { - "esm-env": "1.0.0" - }, - "peerDependencies": { - "svelte": "^3.56.0 || ^4.0.0" - } - }, - "node_modules/@stablelib/base64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", - "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", - "dev": true - }, - "node_modules/@stablelib/hex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hex/-/hex-1.0.1.tgz", - "integrity": "sha512-PQOEChVBjhYGgAD+ehO2ow1gSj1slre3jW4oMD4kV8VrhYhzmtsQDWDZej3BQO8qkVezdczDvISxVSF24PuYNA==", - "dev": true - }, - "node_modules/@sveltejs/adapter-auto": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", - "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", - "dev": true, - "dependencies": { - "import-meta-resolve": "^3.0.0" - }, - "peerDependencies": { - "@sveltejs/kit": "^1.0.0" - } - }, - "node_modules/@sveltejs/adapter-static": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz", - "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==", - "dev": true, - "peerDependencies": { - "@sveltejs/kit": "^1.5.0" - } - }, - "node_modules/@sveltejs/kit": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.0.tgz", - "integrity": "sha512-a1wPIq2uO3RsTmV+KbA4venOgCJDbfHTXFe+g7eJR3N8l46DSuulUONJ1qnk2EnZWYC1Uj3Wbp3US0WFocIzXg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.4.1", - "@types/cookie": "^0.5.1", - "cookie": "^0.5.0", - "devalue": "^4.3.1", - "esm-env": "^1.0.0", - "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "mrmime": "^1.0.1", - "sade": "^1.8.1", - "set-cookie-parser": "^2.6.0", - "sirv": "^2.0.2", - "tiny-glob": "^0.2.9", - "undici": "~5.26.2" - }, - "bin": { - "svelte-kit": "svelte-kit.js" - }, - "engines": { - "node": "^16.14 || >=18" - }, - "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0-next.0", - "vite": "^4.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.3.tgz", - "integrity": "sha512-NY2h+B54KHZO3kDURTdARqthn6D4YSIebtfW75NvZ/fwyk4G+AJw3V/i0OBjyN4406Ht9yZcnNWMuRUFnDNNiA==", - "dev": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3", - "debug": "^4.3.4", - "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.1", - "svelte-hmr": "^0.15.2", - "vitefu": "^0.2.4" - }, - "engines": { - "node": "^14.18.0 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz", - "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": "^14.18.0 || >= 16" - }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.2.0", - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.4.tgz", - "integrity": "sha512-YAm12D3R7/9Mh4jFbYSMnsd6jG++8KxogWgqs7hbdo/86aWjjlIEvL7+QYdVELmAI0InXTpZqFIg5e7aDVWI2Q==", - "dev": true, - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" - } - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", - "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", - "dev": true, - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", - "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.11.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", - "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitest/coverage-v8": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.1.tgz", - "integrity": "sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@bcoe/v8-coverage": "^0.2.3", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "magic-string": "^0.30.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": ">=0.32.0 <1" - } - }, - "node_modules/@vitest/expect": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.32.4.tgz", - "integrity": "sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==", - "dev": true, - "dependencies": { - "@vitest/spy": "0.32.4", - "@vitest/utils": "0.32.4", - "chai": "^4.3.7" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.32.4.tgz", - "integrity": "sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==", - "dev": true, - "dependencies": { - "@vitest/utils": "0.32.4", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/snapshot": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.32.4.tgz", - "integrity": "sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==", - "dev": true, - "dependencies": { - "magic-string": "^0.30.0", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.32.4.tgz", - "integrity": "sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==", - "dev": true, - "dependencies": { - "tinyspy": "^2.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", - "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", - "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", - "dependencies": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "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==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", - "dev": true - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-svelte": { - "version": "2.32.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.32.4.tgz", - "integrity": "sha512-VJ12i2Iogug1jvhwxSlognnfGj76P5gks/V4pUD4SCSVQOp14u47MNP0zAG8AQR3LT0Fi1iUvIFnY4l9z5Rwbg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "debug": "^4.3.1", - "esutils": "^2.0.3", - "known-css-properties": "^0.28.0", - "postcss": "^8.4.5", - "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", - "semver": "^7.5.3", - "svelte-eslint-parser": "^0.32.2" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0-0", - "svelte": "^3.37.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-svelte/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esm-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hash-wasm": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", - "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==", - "dev": true - }, - "node_modules/highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-meta-resolve": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", - "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/intl-messageformat": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", - "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/fast-memoize": "1.2.1", - "@formatjs/icu-messageformat-parser": "2.1.0", - "tslib": "^2.1.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/lucide-svelte": { - "version": "0.268.0", - "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.268.0.tgz", - "integrity": "sha512-w2pqfViiU9PgHkyOoYEr3FBG4tk+fupm2tR7/p6ugfNQZg1ABdXP2okkasEfQ8TF41KkR6uFqQUp8ciCdpGwVw==", - "dev": true, - "peerDependencies": { - "svelte": ">=3 <5" - } - }, - "node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mitt": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", - "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.1.2" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/node-releases": { - "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==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" - } - }, - "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", - "dev": true, - "dependencies": { - "playwright-core": "1.42.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", - "dev": true, - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", - "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - } - ], - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.19" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-svelte": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", - "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", - "dev": true, - "peerDependencies": { - "prettier": "^1.16.4 || ^2.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0" - } - }, - "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prism-svelte": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.5.0.tgz", - "integrity": "sha512-db91Bf3pRGKDPz1lAqLFSJXeW13mulUJxhycysFpfXV5MIK7RgWWK2E5aPAa71s8TCzQUXxF5JOV42/iOs6QkA==" - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.2.tgz", - "integrity": "sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/sander/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/session-keystore": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/session-keystore/-/session-keystore-1.0.3.tgz", - "integrity": "sha512-WO1BHLBqn1Ke17k+PBlMvOKxCjNdpYvrLddcHAo6pc81jMZT+xOiwHjBjKIaxIUiw7B2UMPIp3ScDpxcjn5pkg==", - "dev": true, - "dependencies": { - "@47ng/codec": "^1.0.0", - "mitt": "^2.1.0" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" - }, - "bin": { - "sorcery": "bin/sorcery" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true - }, - "node_modules/std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", - "dev": true - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "3.59.2", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", - "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-autoresize-textarea": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/svelte-autoresize-textarea/-/svelte-autoresize-textarea-0.0.6.tgz", - "integrity": "sha512-K9KLsKCeb2iZB7U2egb2ZEJ98YDyYKycXdo0R2jtO7/zSIKkevCfNsPF1rpm7eYwJk5I4YN8ki2cHaECLgzpTA==", - "dependencies": { - "prism-svelte": "^0.5.0", - "prismjs": "^1.29.0" - }, - "peerDependencies": { - "svelte": "^3.54.0" - } - }, - "node_modules/svelte-check": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.6.tgz", - "integrity": "sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^5.0.4", - "typescript": "^5.0.3" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" - } - }, - "node_modules/svelte-eslint-parser": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.32.2.tgz", - "integrity": "sha512-Ok9D3A4b23iLQsONrjqtXtYDu5ZZ/826Blaw2LeFZVTg1pwofKDG4mz3/GYTax8fQ0plRGHI6j+d9VQYy5Lo/A==", - "dev": true, - "dependencies": { - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "postcss": "^8.4.25", - "postcss-scss": "^4.0.6" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, - "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/svelte-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/svelte-hmr": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", - "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0-next.0" - } - }, - "node_modules/svelte-i18n": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.7.0.tgz", - "integrity": "sha512-kfdJsYsyOE9tFEVtjPXvrUaufXQnbFAI6LsX9vaQP+xm8A5Wao2qQ6pRZmIUCAvXvYQt7aXQ7hK9+NP9AlxehA==", - "dev": true, - "dependencies": { - "cli-color": "^2.0.3", - "deepmerge": "^4.2.2", - "estree-walker": "^2", - "intl-messageformat": "^9.13.0", - "sade": "^1.8.1", - "tiny-glob": "^0.2.9" - }, - "bin": { - "svelte-i18n": "dist/cli.js" - }, - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "svelte": "^3 || ^4" - } - }, - "node_modules/svelte-preprocess": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", - "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 14.10.0" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sveltekit-superforms": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-1.6.0.tgz", - "integrity": "sha512-Ob3vbgPuVMFuebD8R7qWHDyMVmHvbU6HYqa/ozuV9HbETkkkX7XhyDz/yMxW4q8T2kRiO50CASskiB3l6yKiqA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ciscoheat" - }, - { - "type": "ko-fi", - "url": "https://ko-fi.com/ciscoheat" - }, - { - "type": "paypal", - "url": "https://www.paypal.com/donate/?hosted_button_id=NY7F5ALHHSVQS" - } - ], - "peerDependencies": { - "@sveltejs/kit": "1.x", - "svelte": "3.x || 4.x", - "zod": "3.x" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", - "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz", - "integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==", - "dev": true - }, - "node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.32.4.tgz", - "integrity": "sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", - "dev": true, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vitest": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.32.4.tgz", - "integrity": "sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.32.4", - "@vitest/runner": "0.32.4", - "@vitest/snapshot": "0.32.4", - "@vitest/spy": "0.32.4", - "@vitest/utils": "0.32.4", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.5.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.32.4", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", - "dev": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/web/package.json b/web/package.json deleted file mode 100644 index 0c0f00a..0000000 --- a/web/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "front", - "version": "0.0.1", - "private": true, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "test": "vitest run", - "test:unit": "vitest", - "test:cov": "vitest run --coverage", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." - }, - "devDependencies": { - "@floating-ui/dom": "^1.5.1", - "@playwright/test": "^1.42.1", - "@skeletonlabs/skeleton": "^1.11.0", - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.5.0", - "@tailwindcss/forms": "^0.5.4", - "@tailwindcss/typography": "^0.5.9", - "@types/node": "^20.11.28", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "@vitest/coverage-v8": "^0.34.1", - "autoprefixer": "^10.4.14", - "base64-js": "^1.5.1", - "bip39": "^3.1.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.26.0", - "hash-wasm": "^4.9.0", - "highlight.js": "^11.8.0", - "idb": "^7.1.1", - "lucide-svelte": "^0.268.0", - "postcss": "^8.4.27", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.8.1", - "session-keystore": "^1.0.3", - "svelte": "^3.54.0", - "svelte-check": "^3.0.1", - "svelte-i18n": "^3.7.0", - "sveltekit-superforms": "^1.6.0", - "tailwindcss": "^3.3.3", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.3.0", - "vitest": "^0.32.0", - "zod": "^3.22.2" - }, - "type": "module", - "dependencies": { - "axios": "^1.6.7", - "svelte-autoresize-textarea": "^0.0.6" - } -} diff --git a/web/playwright.config.ts b/web/playwright.config.ts deleted file mode 100644 index fa96668..0000000 --- a/web/playwright.config.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { defineConfig, devices } from '@playwright/test'; - -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - -/** - * See https://playwright.dev/docs/test-configuration. - */ -export default defineConfig({ - testDir: './tests', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://127.0.0.1:3000', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // url: 'http://127.0.0.1:3000', - // reuseExistingServer: !process.env.CI, - // }, -}); diff --git a/web/postcss.config.cjs b/web/postcss.config.cjs deleted file mode 100644 index 5cbc2c7..0000000 --- a/web/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {} - } -}; diff --git a/web/src/app.d.ts b/web/src/app.d.ts deleted file mode 100644 index 3e4ed20..0000000 --- a/web/src/app.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -// and what to do when importing types -declare namespace App { - // interface Locals {} - // interface PageData {} - // interface Error {} - // interface Platform {} -} diff --git a/web/src/app.html b/web/src/app.html deleted file mode 100644 index ee5545a..0000000 --- a/web/src/app.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- - diff --git a/web/src/app.postcss b/web/src/app.postcss deleted file mode 100644 index 70244bb..0000000 --- a/web/src/app.postcss +++ /dev/null @@ -1,5 +0,0 @@ -/*place global styles here */ -html, -body { - @apply h-full; -} diff --git a/web/src/index.test.ts b/web/src/index.test.ts deleted file mode 100644 index 964d287..0000000 --- a/web/src/index.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, it, expect } from 'vitest'; - -describe('sum test', () => { - it('adds 1 + 2 to equal 3', () => { - expect(1 + 2).toBe(3); - }); -}); diff --git a/web/src/lib/bubbliClient.ts b/web/src/lib/bubbliClient.ts deleted file mode 100644 index 646158e..0000000 --- a/web/src/lib/bubbliClient.ts +++ /dev/null @@ -1,7 +0,0 @@ -import axios from "axios"; -import { BASE_API_URI } from "./constants"; - -export const bubbliClient = axios.create({ - baseURL: BASE_API_URI, - headers: {'Content-Type': 'application/json'}, - }); \ No newline at end of file diff --git a/web/src/lib/components/NavAvatar.svelte b/web/src/lib/components/NavAvatar.svelte deleted file mode 100644 index 70532e1..0000000 --- a/web/src/lib/components/NavAvatar.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -
- - -
- -
-
diff --git a/web/src/lib/components/Navigation.svelte b/web/src/lib/components/Navigation.svelte deleted file mode 100644 index a93fa89..0000000 --- a/web/src/lib/components/Navigation.svelte +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/web/src/lib/components/Post.svelte b/web/src/lib/components/Post.svelte deleted file mode 100644 index 4f5b993..0000000 --- a/web/src/lib/components/Post.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - -
- -
- {authorName} posted a message - -
-

Content: {content}

-

Post raw: {JSON.stringify(post)}

-
diff --git a/web/src/lib/components/PostInput.svelte b/web/src/lib/components/PostInput.svelte deleted file mode 100644 index a4395b5..0000000 --- a/web/src/lib/components/PostInput.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - -
-
- -
-
diff --git a/web/src/lib/config/zod-schemas.ts b/web/src/lib/config/zod-schemas.ts deleted file mode 100644 index 36e8a39..0000000 --- a/web/src/lib/config/zod-schemas.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { z } from 'zod'; - -export const userSchema = z.object({ - displayName: z - .string({ required_error: 'Display Name is required' }) - .min(1, { message: 'Display Name is required' }) - .trim(), - username: z - .string({ required_error: 'Username is required' }) - .min(1, { message: 'Username is required' }) - .trim(), - email: z - .string({ required_error: 'Email is required' }) - .email({ message: 'Please enter a valid email address' }), - password: z - .string({ required_error: 'Password is required' }) - .min(8, { message: 'Password must be at least 8 characters' }) - .trim(), - confirmPassword: z - .string({ required_error: 'Password is required' }) - .min(8, { message: 'Password must be at least 8 characters' }) - .trim() - //terms: z.boolean({ required_error: 'You must accept the terms and privacy policy' }), -}); diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts deleted file mode 100644 index 1c40b73..0000000 --- a/web/src/lib/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const BASE_API_URI = 'https://local.bubbli.org/api/v1'; diff --git a/web/src/lib/crypto.ts b/web/src/lib/crypto.ts deleted file mode 100644 index 3b6a005..0000000 --- a/web/src/lib/crypto.ts +++ /dev/null @@ -1,281 +0,0 @@ -import { fromByteArray, toByteArray } from 'base64-js'; -import { argon2id } from 'hash-wasm'; -import type { IArgon2Options } from 'hash-wasm'; -// import { generateMnemonic } from 'bip39'; - -export type ProtectedContent = { - protected_content: ArrayBuffer; - algorithm: Algorithm; -}; - -const encoder = new TextEncoder(); - -// Desired key lengths for encryption and authentication (in bytes) -const encryptionKeyByteLength = 32; // 256 bits -const authenticationKeyByteLength = 32; // 256 bits -const clientKeyByteLength = 32; // 256 bits NOTE: must be a multiple of 64 bits to be compatible with AES-KW - -const symmetricKeyParams = { - name: 'AES-GCM', - length: 256 -}; - -const clientKeyParams = { - name: 'AES-GCM', - length: 256 -} -const clientKeyUsages: KeyUsage[] = ['wrapKey', 'unwrapKey']; - -const rootKeyPairParams = { - name: 'RSA-OAEP', - modulusLength: 4096, - publicExponent: new Uint8Array([1, 0, 1]), - hash: 'SHA-256' -}; - -// https://bitwarden.com/help/kdf-algorithms/#argon2id -const argon2Options: Partial = { - parallelism: 4, - iterations: 3, - memorySize: 65536, // use 64MiB memory - hashLength: encryptionKeyByteLength + authenticationKeyByteLength, // output size = 64 bytes - outputType: 'binary' // return standard encoded string containing parameters needed to verify the key -}; - -export const generatePasswordBasedKeysArgon2 = async ( - pw: string, - salt: Uint8Array -): Promise<{ clientKey: CryptoKey; rootPasswordHash: Uint8Array; }> => { - // @ts-ignore - const keyMaterial: Uint8Array = await argon2id({ - ...argon2Options, - ...{ - password: pw, - salt - } - }); - - // key splitting into encryption and authentication "keys" - const clientKeyMaterial = keyMaterial.slice(0, clientKeyByteLength); - const authenticationHash = keyMaterial.slice( - clientKeyByteLength, - clientKeyByteLength + authenticationKeyByteLength - ); - - // client keys are exclusively used for wrapping and unwrapping master private keys - const clientKey = await crypto.subtle.importKey( - 'raw', - clientKeyMaterial, - clientKeyParams, - true, // TODO: change back to false - clientKeyUsages - ); - - return { clientKey: clientKey, rootPasswordHash: authenticationHash }; -}; - -export const generateSalt = () => { - return crypto.getRandomValues(new Uint8Array(32)); -}; - -export const generateEncryptionIV = () => { - return crypto.getRandomValues(new Uint8Array(12)); -}; - -export const generateMasterKeyPair = async () => { - return await crypto.subtle.generateKey(rootKeyPairParams, true, ["wrapKey", "unwrapKey"]); -}; - -export const generateSymmetricEncryptionKey = async (): Promise => { - return await crypto.subtle.generateKey(symmetricKeyParams, true, ['encrypt', 'decrypt']); -}; - -export const encryptMessage = async ( - encryptionKey: CryptoKey, - message: string, -) => { - const encodedMessage = encoder.encode(message); - if (encryptionKey.algorithm.name === 'AES-GCM') { - const algorithm = { - name: 'AES-GCM', - iv: generateEncryptionIV() - } - const encryptedMessage = await crypto.subtle.encrypt( - algorithm, - encryptionKey, - encodedMessage - ) - return { encryptedMessage, algorithm }; - } else { - throw new Error(`Unsupported encryption algorithm: ${encryptionKey.algorithm.name}`) - } -} - -export const decryptMessage = async ( - encryptionKey: CryptoKey, - encryptedMessage: Uint8Array, - encryptionAlgorithm: Algorithm -) => { - return crypto.subtle.decrypt( - encryptionAlgorithm, - encryptionKey, - encryptedMessage - ); -} - -export const wrapMasterKey = async ( - cryptoKey: CryptoKey, - wrappingKey: CryptoKey, -): Promise<{wrappedKey: ArrayBuffer, keyWrapAlgorithm: AlgorithmIdentifier}> => { - const keyWrapAlgorithm = { - name: "AES-GCM", - iv: generateEncryptionIV() - } - const wrappedKey = await crypto.subtle.wrapKey('pkcs8', cryptoKey, wrappingKey, keyWrapAlgorithm); - return { wrappedKey, keyWrapAlgorithm }; -} - -export const unwrapMasterKey = async ( - wrappedCryptoKey: ArrayBuffer, - wrappingKey: CryptoKey, - wrappingAlgorithm: AlgorithmIdentifier, - keyAlgorithm: AlgorithmIdentifier, - keyUsages: Array -): Promise => { - console.log('pkcs8', wrappedCryptoKey, wrappingKey, wrappingAlgorithm, keyAlgorithm, false, keyUsages) - return await crypto.subtle.unwrapKey('pkcs8', wrappedCryptoKey, wrappingKey, wrappingAlgorithm, keyAlgorithm, false, keyUsages); -} - -export const wrapEncryptionKey = async ( - cryptoKey: CryptoKey, - wrappingKey: CryptoKey, -): Promise<{wrappedKey: ArrayBuffer, keyWrapAlgorithm: any}> => { - // const iv = generateEncryptionIV(); - const keyWrapAlgorithm = { - name: "RSA-OAEP", - // iv: iv // TODO: is this not necessary? - } - const wrappedKey = await crypto.subtle.wrapKey('raw', cryptoKey, wrappingKey, keyWrapAlgorithm); - return { wrappedKey, keyWrapAlgorithm }; -} - -export const wrapCryptoKey = async ( - cryptoKey: CryptoKey, - wrappingKey: CryptoKey, - keyWrapAlgorithm: AlgorithmIdentifier, -): Promise<{wrappedKey: ArrayBuffer, keyWrapAlgorithm: AlgorithmIdentifier}> => { - console.log('raw', cryptoKey, wrappingKey, keyWrapAlgorithm) - const wrappedKey = await crypto.subtle.wrapKey('raw', cryptoKey, wrappingKey, keyWrapAlgorithm); - return { wrappedKey, keyWrapAlgorithm }; -} - -export const unwrapCryptoKey = async ( - wrappedCryptoKey: ArrayBuffer, - wrappingKey: CryptoKey, - wrappingAlgorithm: AlgorithmIdentifier, - keyAlgorithm: AlgorithmIdentifier, - keyUsages: Array -): Promise => { - console.log('raw', wrappedCryptoKey, wrappingKey, wrappingAlgorithm, keyAlgorithm, keyUsages) - return await crypto.subtle.unwrapKey('raw', wrappedCryptoKey, wrappingKey, wrappingAlgorithm, keyAlgorithm, true, keyUsages); -} - -// export const encryptAsymmetricKey = async ( -// encryptionKey: CryptoKey, -// cryptoKey: CryptoKey, -// iv: Uint8Array -// ): Promise => { -// return await crypto.subtle.wrapKey('pkcs8', cryptoKey, encryptionKey, { -// name: 'AES-GCM', -// iv: iv -// }); -// }; - -// export const decryptAsymmetricKey = async ( -// encryptionKey: CryptoKey, -// encryptedAsymmetricKey: Uint8Array, -// iv: Uint8Array -// ): Promise => { -// return await crypto.subtle.unwrapKey( -// 'pkcs8', -// encryptedAsymmetricKey, -// encryptionKey, -// { -// name: 'AES-GCM', -// iv: iv -// }, -// asymmetricKeyPairParams, -// true, -// // Can't have encrypt here because only the public key of RSA-OAEP can be used for encryption -// // https://stackoverflow.com/questions/76403336/javascript-webcryptoapi-why-does-this-not-satisfy-operation-specific-requiremen -// ['decrypt'] -// ); -// }; - -// // TODO: I really need to shore up what's going on here -// // I can't just have this generic method - it's not that simple -// export const encryptSymmetricKey = async ( -// encryptionKey: CryptoKey, -// cryptoKey: CryptoKey, -// iv: Uint8Array -// ): Promise => { -// return await crypto.subtle.wrapKey('raw', cryptoKey, encryptionKey, { -// name: 'AES-GCM', -// iv: iv -// }); -// }; - -// // TODO: should we use AES-KW? -// // *sigh* doesn't work with RSA keys -// // https://stackoverflow.com/questions/72607534/how-to-use-crypto-subtle-wrapkey-to-wrap-an-rsa-pss-private-key-using-aes-kw -// export const decryptSymmetricKey = async ( -// encryptionKey: CryptoKey, -// encryptedSymmetricKey: ArrayBuffer, -// iv: ArrayBuffer -// ): Promise => { -// return await crypto.subtle.unwrapKey( -// 'raw', -// encryptedSymmetricKey, -// encryptionKey, -// { -// name: 'AES-GCM', -// iv: iv -// }, -// asymmetricKeyPairParams, -// true, -// ['encrypt', 'decrypt'] -// ); -// } - -export const exportPublicKeyAsPEM = async (publicKey: CryptoKey) => { - const exportedPublicKey = await crypto.subtle.exportKey('spki', publicKey); - return `-----BEGIN PUBLIC KEY-----\n${base64EncodeArrayBuffer( - exportedPublicKey - )}\n-----END PUBLIC KEY-----`; -}; - -export const base64EncodeArrayBuffer = (arrayBuffer: ArrayBuffer) => { - const bytes = new Uint8Array(arrayBuffer); - return fromByteArray(bytes); -}; - -// TODO: why so hard to type -export const serializeWrapAlgorithm = (wrapAlgorithm: any) => { - if (typeof wrapAlgorithm === 'string') { - return wrapAlgorithm; - } - return { - ...wrapAlgorithm, - iv: base64EncodeArrayBuffer(wrapAlgorithm.iv) - } -} - -export const deserializeWrapAlgorithm = (wrapAlgorithm: any) => { - if (typeof wrapAlgorithm === 'string') { - return wrapAlgorithm; - } - return { - ...wrapAlgorithm, - iv: toByteArray(wrapAlgorithm.iv) - } -} \ No newline at end of file diff --git a/web/src/lib/error.ts b/web/src/lib/error.ts deleted file mode 100644 index 84fde92..0000000 --- a/web/src/lib/error.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { toastStore } from '@skeletonlabs/skeleton'; -import type { ToastSettings } from '@skeletonlabs/skeleton'; - -export const triggerError = (message: string) => { - const t: ToastSettings = { - message: message, - background: 'variant-filled-error' - }; - toastStore.trigger(t); -}; diff --git a/web/src/lib/post.ts b/web/src/lib/post.ts deleted file mode 100644 index f4e5e08..0000000 --- a/web/src/lib/post.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { toByteArray } from 'base64-js' -import { decryptMessage, encryptMessage, generateEncryptionIV, type ProtectedContent } from './crypto' -import { getEncryptionKey } from './stores/encryption_key_store' -import type { Timeline } from './timelines' - -export type Post = { - id: string - protected_content: string // base64 encoded - encryption_algorithm: any // base64 encoded TODO: how to handle - author: any - content: string - created_at: Date - updated_at: Date - timeline_id: string - encryption_context_id: string -} - -export const protectPost = async (timeline: Timeline, content: string): Promise => { - const timelineEncryptionKey = await getEncryptionKey(timeline.encryption_context_id) - if (!timelineEncryptionKey) { - throw new Error(`Timeline encryption key not found for '${timeline.encryption_context_id}'`) - } - const { encryptedMessage: protectedContent, algorithm } = await encryptMessage(timelineEncryptionKey, content) - - return { - protected_content: protectedContent, - algorithm: algorithm - } -} - -export const decryptPost = async (post: Post) => { - const timelineEncryptionKey = await getEncryptionKey(post.encryption_context_id) - if (!timelineEncryptionKey) { - throw new Error(`Timeline encryption key not found for '${post.encryption_context_id}'`) - } - // TODO: make this more maintainable - const rawContent = toByteArray(post.protected_content) - const {iv, name} = post.encryption_algorithm - const alg = {iv: toByteArray(iv), name} - const messageContent = await decryptMessage(timelineEncryptionKey, rawContent, alg) - return new TextDecoder("utf-8").decode(messageContent) -} \ No newline at end of file diff --git a/web/src/lib/stores/encryption_key_store.ts b/web/src/lib/stores/encryption_key_store.ts deleted file mode 100644 index 9ee8fbd..0000000 --- a/web/src/lib/stores/encryption_key_store.ts +++ /dev/null @@ -1,98 +0,0 @@ -// storage for encryption keys and the user's master private key pair -// We need to store an encryption key per encryption context, at the very least that means one per timeline. -// Encryption keys should be stored as non-exportable - -import { openDB } from 'idb'; -import type { DBSchema } from 'idb'; - -const keyStoreDBName = 'key-store'; -const masterKeyStore = 'master-private-key'; -const encryptionKeyStore = 'encryption-keys'; -const clientKeyStore = 'client-keys'; - -interface KeyStoreDBV1 extends DBSchema { - 'master-private-key': { - key: string; - value: CryptoKey; - }; - 'encryption-keys': { - key: string; - value: CryptoKey; - }; - 'client-keys': { - key: string; - value: CryptoKey; - }; -} - -export const getMasterPrivateKey = async (): Promise => { - // TODO: figure out what key to store this as - return (await openKeyStore()).get(masterKeyStore, 'primary'); -} - -export const storeMasterPrivateKey = async (keyContent: CryptoKey): Promise => { - return (await openKeyStore()).put(masterKeyStore, keyContent, 'primary'); -} - -export const getClientKey = async (keyType: string): Promise => { - return (await openKeyStore()).get(clientKeyStore, keyType); -} - -export const storeClientKey = async (keyType: string, keyContent: CryptoKey): Promise => { - return (await openKeyStore()).put(clientKeyStore, keyContent, keyType); -} - -export const getEncryptionKey = async (encryptionContextID: string): Promise => { - return (await openKeyStore()).get(encryptionKeyStore, encryptionContextID); -}; - -export const storeEncryptionKey = async (encryptionContextID: string, keyContent: CryptoKey): Promise => { - return (await openKeyStore()).put(encryptionKeyStore, keyContent, encryptionContextID); -}; - -export const deleteEncryptionKey = async (encryptionContextID: string): Promise => { - return (await openKeyStore()).delete(encryptionKeyStore, encryptionContextID); -}; - -export const clearKeys = async (): Promise => { - (await openKeyStore()).clear(masterKeyStore); - (await openKeyStore()).clear(encryptionKeyStore); -}; - -export const listEncryptionKeys = async (): Promise => { - return (await openKeyStore()).getAllKeys(encryptionKeyStore); -} - -const openKeyStore = async () => { - const db = await openDB(keyStoreDBName, 1, { - upgrade(db) { - db.createObjectStore(masterKeyStore); - db.createObjectStore(encryptionKeyStore); - db.createObjectStore(clientKeyStore); - }, - }); - return db; -} - -// NOTE: the session_keystore isn't persisting past refreshes like it says it should -// Alright, so here's what we're going to do. -// store the unexportable master encryption key and the encrypted private key in indexedDB. -// With that, we'll have longer term storage and supposedly it's ok to store unexportable -// crypto keys in indexedDB. -// example: https://gist.github.com/saulshanabrook/b74984677bccd08b028b30d9968623f5 -// another: https://blog.engelke.com/2014/09/19/saving-cryptographic-keys-in-the-browser/ - -// Previous implementation using session keystore -// import SessionKeystore from 'session-keystore'; - -// // You can create multiple stores, but give them a unique name: -// // (default name is 'default') -// export const encryptionKeyStore = new SessionKeystore< -// masterPrivateKeyConst | masterEncryptionKeyConst -// >({ name: 'encryptionKey' }); - -// encryptionKeyStore.on('created', ({ name }) => console.log('Key created: ', name)); -// encryptionKeyStore.on('updated', ({ name }) => console.log('Key updated: ', name)); -// encryptionKeyStore.on('deleted', ({ name }) => console.log('Key deleted: ', name)); -// encryptionKeyStore.on('expired', ({ name }) => console.log('Key expired: ', name)); -// encryptionKeyStore.on('read', ({ name }) => console.log('Key accessed: ', name)); diff --git a/web/src/lib/stores/user_store.ts b/web/src/lib/stores/user_store.ts deleted file mode 100644 index 7af091f..0000000 --- a/web/src/lib/stores/user_store.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Timeline } from '$lib/timelines'; -import { localStorageStore } from '@skeletonlabs/skeleton'; -import type { Writable } from 'svelte/store'; - -export interface User { - email: string; - id: string; - salt: null | Uint8Array; - client_public_key: null | CryptoKey - display_name: string; - username: string; - home_timeline: null | Timeline; -} - -const initialUser = { - email: '', - id: '', - salt: null, - client_public_key: null, - display_name: '', - username: '', - home_timeline: null, -} - -export const userStore: Writable = localStorageStore('currentUser', initialUser); - -export const clearUserStore = () => { - userStore.set(initialUser); -} diff --git a/web/src/lib/timelines.ts b/web/src/lib/timelines.ts deleted file mode 100644 index 80f07e7..0000000 --- a/web/src/lib/timelines.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BASE_API_URI } from '$lib/constants'; -import { base64EncodeArrayBuffer } from './crypto'; -import { protectPost } from './post'; - -export type Timeline = { - id: string - type: string - encryption_context_id: string -} - -export const fetchHome = async () => { - const res = await fetch(`${BASE_API_URI}/timelines/home`, { - credentials: 'include' - }); - if (res.status === 200) { - const postsData = await res.json() - - return postsData - } -} - -export const createPost = async (timeline: Timeline, content: string) => { - const protectedPost = await protectPost(timeline, content) - const serializedProtectedPost = { - protected_content: base64EncodeArrayBuffer(protectedPost.protected_content), - encryption_algorithm: serializeEncryptionAlgorithm(protectedPost.algorithm), - } - - const res = await fetch(`${BASE_API_URI}/timelines/${timeline.id}/posts`, { - method: 'POST', - credentials: 'include', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(serializedProtectedPost) - }); - if (res.status === 200) { - const postData = await res.json() - - return postData - } -} - -function serializeEncryptionAlgorithm(algorithm: any) { - // returns the object as is, but base64 encodes the iv if present - if (algorithm.iv) { - return { - ...algorithm, - iv: base64EncodeArrayBuffer(algorithm.iv) - } - } - return algorithm -} diff --git a/web/src/lib/user.ts b/web/src/lib/user.ts deleted file mode 100644 index 59a137c..0000000 --- a/web/src/lib/user.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { BASE_API_URI } from '$lib/constants'; -import { userStore, type User, clearUserStore } from '$lib/stores/user_store'; -import { fromByteArray } from 'base64-js'; -import { invalidateAll } from '$app/navigation'; - -import { - generatePasswordBasedKeysArgon2, - generateSymmetricEncryptionKey, - generateMasterKeyPair, - exportPublicKeyAsPEM, - base64EncodeArrayBuffer, - wrapMasterKey, - unwrapMasterKey, - wrapEncryptionKey, - unwrapCryptoKey, - serializeWrapAlgorithm, - deserializeWrapAlgorithm -} from '$lib/crypto'; - -import { - storeEncryptionKey, - storeMasterPrivateKey, - clearKeys, - getClientKey, - storeClientKey, -} from '$lib/stores/encryption_key_store'; -import { unwrap } from 'idb'; -import type { A } from 'vitest/dist/types-198fd1d9'; -import { bubbliClient } from './bubbliClient'; - -const encoder = new TextEncoder(); - -export const getCurrentUser = async (fetchFn: Function) => { - const res = await fetchFn(`${BASE_API_URI}/current_user/`, { - credentials: 'include' - }); - if (res.status === 200) { - // TODO: type API responses - res.json().then((data: any) => { - console.log(data); - return data.user; - }); - } - console.log('Error retrieving user data'); - return null; -}; - -export const logOutUser = async () => { - fetch(`${BASE_API_URI}/auth/logout/`, { - method: 'DELETE', - credentials: 'include' - }) - .then((res) => { - console.log(res); - }) - .catch((error) => { - console.log('Error clearing out login state', error); - }); - - clearUserStore(); - clearKeys(); - invalidateAll(); -}; - -const emailRegex = /^.+@.+\..+$/; -export const validateEmail = (email: string) => { - return !!email.match(emailRegex); -}; - -export const register = async (user: User, password: string) => { - const salt = encoder.encode(user.email); - // TODO: recovery key - same as password based key but with random phrase - // generate keys - const { clientKey: passwordClientKey, rootPasswordHash } = await generatePasswordBasedKeysArgon2( - password, - salt - ); - - const rootKeyPair = await generateMasterKeyPair(); - - const pemExportedPublicKey = await exportPublicKeyAsPEM(rootKeyPair.publicKey); - const { wrappedKey: passwordWrappedPrivateMasterKey, keyWrapAlgorithm: privateMasterKeyWrapAlgo } = await wrapMasterKey( - rootKeyPair.privateKey, - passwordClientKey - ) - - - - // generates up front a user's timeline encryption key - const timelineEncryptionKey = await generateSymmetricEncryptionKey(); - const { wrappedKey: wrappedTimelineEncryptionKey, keyWrapAlgorithm: timelineEncryptionKeyWrapAlgo } = await wrapEncryptionKey( - timelineEncryptionKey, - rootKeyPair.publicKey, // encrypt with user's public key - ); - - await storeClientKey("password", passwordClientKey) - await storeMasterPrivateKey(rootKeyPair.privateKey); - await storeEncryptionKey("home", timelineEncryptionKey); - - // wait until response to store the user's encryption key so we have the ID - userStore.set({ ...user, ...{ salt: salt } }); - // return axios.post() - - const encodedClientKeys = [ - { - type: 'password', - key_algorithm: rootKeyPair.privateKey.algorithm, - key_usages: rootKeyPair.privateKey.usages, - // this inlined mutation seems super sketch to me - wrap_algorithm: serializeWrapAlgorithm(privateMasterKeyWrapAlgo), - protected_private_key: base64EncodeArrayBuffer(passwordWrappedPrivateMasterKey) - } - ]; - - return bubbliClient.post('/auth/register', { - email: user.email, - display_name: user.display_name, - username: user.username, - public_key: pemExportedPublicKey, - root_password_hash: base64EncodeArrayBuffer(rootPasswordHash), - client_keys: encodedClientKeys, - timeline_key: { - key_algorithm: timelineEncryptionKey.algorithm, - key_usages: timelineEncryptionKey.usages, - wrap_algorithm: serializeWrapAlgorithm(timelineEncryptionKeyWrapAlgo), - protected_encryption_key: base64EncodeArrayBuffer(wrappedTimelineEncryptionKey) - }, - }) -}; - -export const login = async (email: string, password: string) => { - const salt = encoder.encode(email); - const { clientKey, rootPasswordHash } = await generatePasswordBasedKeysArgon2( - password, - salt - ); - await storeClientKey('password', clientKey); - return bubbliClient.post("/auth/login", { - email: email, - root_password_hash: base64EncodeArrayBuffer(rootPasswordHash), - client_key_type: "password" - }) -}; - -export const decryptAndLoadMasterPrivateKey = async ( - encryptedPrivateKey: Uint8Array, - wrappingAlgorithm: {name: string, iv: Uint8Array}, - privateKeyAlgorithm: AlgorithmIdentifier, - privateKeyUsages: Array -) => { - const clientKey = await getClientKey('password'); - if (!clientKey || !encryptedPrivateKey || !wrappingAlgorithm || ! privateKeyAlgorithm || !privateKeyUsages) { - throw new Error('Missing required parameters for decryptAndLoadMasterPrivateKey') - } - console.log("unwrapping master key") - - const masterPrivateKey = await unwrapMasterKey( - encryptedPrivateKey, - clientKey, - wrappingAlgorithm, - privateKeyAlgorithm, - privateKeyUsages - ) - - console.log("storing master key") - await storeMasterPrivateKey(masterPrivateKey); - return masterPrivateKey -}; - -export const decryptAndLoadEncryptionKeys = async ( - masterPrivateKey: CryptoKey, - encryptionKeys: Array<{ - protected_encryption_key: Uint8Array; - wrap_algorithm: KeyAlgorithm, - key_algorithm: KeyAlgorithm, - key_usages: Array - encryption_context_id: string; - }> -) => { - const encryptionKeyPromises = encryptionKeys.map(async (encryptionKey) => { - console.log("wrapped encryption key", encryptionKey) - const decryptedEncryptionKey = await unwrapCryptoKey( - encryptionKey.protected_encryption_key, - masterPrivateKey, - encryptionKey.wrap_algorithm, - encryptionKey.key_algorithm.name, // this is probably wrong - encryptionKey.key_usages - ); - - await storeEncryptionKey(encryptionKey.encryption_context_id, decryptedEncryptionKey); - }); - - await Promise.all(encryptionKeyPromises); -} \ No newline at end of file diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte deleted file mode 100644 index c1942a3..0000000 --- a/web/src/routes/+layout.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - - -

Navigation

-
- -
- - - - - - - -
- - - Bubbli - -
-
- - {#if authed} - - {:else} - Login - Register - {/if} - - -
- - - -
diff --git a/web/src/routes/+layout.ts b/web/src/routes/+layout.ts deleted file mode 100644 index 0d8c25e..0000000 --- a/web/src/routes/+layout.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { get } from 'svelte/store'; -import { userStore } from '$lib/stores/user_store'; -import { getCurrentUser } from '$lib/user'; - -export const ssr = false; - -export const load: LayoutLoad = async ({ fetch }) => { - let user = get(userStore); - if (user && user.email && user.email !== '') { - console.log('already logged in as ', user.email); - } else { - user = await getCurrentUser(fetch); - if (user && user.email !== '') { - console.log('fetched user data for ', user.email); - userStore.set(user); - } else { - userStore.set({}); - } - } - //if (!user.email || $uesr.email === '') { - // goto('/') - //} -}; diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte deleted file mode 100644 index dff8119..0000000 --- a/web/src/routes/+page.svelte +++ /dev/null @@ -1,19 +0,0 @@ -
-
-

Bubbli

-

Start by exploring:

-
    -
  • - /src/routes/+layout.svelte - barebones layout, the CSS import order - is critical! -
  • -
  • - /src/app.postcss - minimal css to make the page full screen, may not - be relevant for your project -
  • -
  • - /src/routes/+page.svelte - this page, you can replace the contents -
  • -
-
-
diff --git a/web/src/routes/dashboard/+layout.svelte b/web/src/routes/dashboard/+layout.svelte deleted file mode 100644 index a6a3e55..0000000 --- a/web/src/routes/dashboard/+layout.svelte +++ /dev/null @@ -1,9 +0,0 @@ -
- - - - - - - -
diff --git a/web/src/routes/dashboard/+layout.ts b/web/src/routes/dashboard/+layout.ts deleted file mode 100644 index 49809ab..0000000 --- a/web/src/routes/dashboard/+layout.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { goto } from '$app/navigation'; -import { get } from 'svelte/store'; -import { userStore } from '$lib/stores/user_store'; -import { getCurrentUser } from '$lib/user'; - -export const ssr = false; - -export const load: LayoutLoad = async () => { - // TODO: actually confirm that the user has a current access token - let user = get(userStore); - if (user && user.email && user.email !== '') { - console.log('already logged in as ', user.email); - } else { - console.log('Not logged in, redirecting to login'); - goto(`/login`); - } -}; diff --git a/web/src/routes/dashboard/+page.svelte b/web/src/routes/dashboard/+page.svelte deleted file mode 100644 index 59f04a6..0000000 --- a/web/src/routes/dashboard/+page.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - - -{#each posts as post} - -{/each} - diff --git a/web/src/routes/dashboard/+page.ts b/web/src/routes/dashboard/+page.ts deleted file mode 100644 index 6b7eff2..0000000 --- a/web/src/routes/dashboard/+page.ts +++ /dev/null @@ -1,6 +0,0 @@ -export async function load({ }) { - return { - // privateKey: await getMasterPrivateKey(), - // encryptionKey: await getEncryptionKey("home") - }; -} \ No newline at end of file diff --git a/web/src/routes/login/+page.svelte b/web/src/routes/login/+page.svelte deleted file mode 100644 index 25fc164..0000000 --- a/web/src/routes/login/+page.svelte +++ /dev/null @@ -1,154 +0,0 @@ - - - - Login - - - -
-
-

Login

- {#if error} -

{error}

- {/if} - - - - Basic Information - - - - - Security - - - -
-
diff --git a/web/src/routes/register/+page.svelte b/web/src/routes/register/+page.svelte deleted file mode 100644 index 92d8562..0000000 --- a/web/src/routes/register/+page.svelte +++ /dev/null @@ -1,153 +0,0 @@ - - - - Register - - - -
-
-

Register

- {#if error} -

{error}

- {/if} - - - - Basic Information - - - - - - - - Security - - {#if passwordLocked} -

Password must be 8 characters or more

- {:else} -

😎 Password meets minimum rules

- {/if} -
-
-
-

Already a user? Login.

-
diff --git a/web/src/routes/register/+page.ts b/web/src/routes/register/+page.ts deleted file mode 100644 index e739ef4..0000000 --- a/web/src/routes/register/+page.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { dev } from '$app/environment'; - -// we don't need any JS on this page, though we'll load -// it in dev so that we get hot module replacement -export const csr = dev; - -// since there's no dynamic data here, we can prerender -// it so that it gets served as a static asset in production -export const prerender = true; diff --git a/web/static/favicon.png b/web/static/favicon.png deleted file mode 100644 index 825b9e6..0000000 Binary files a/web/static/favicon.png and /dev/null differ diff --git a/web/static/robots.txt b/web/static/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/web/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/web/svelte.config.js b/web/svelte.config.js deleted file mode 100644 index ad98b73..0000000 --- a/web/svelte.config.js +++ /dev/null @@ -1,21 +0,0 @@ -import adapter from '@sveltejs/adapter-static'; -import { vitePreprocess } from '@sveltejs/kit/vite'; -/** @type {import('@sveltejs/kit').Config} */ -const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors - preprocess: vitePreprocess(), - - vitePlugin: { - inspector: true - }, - kit: { - // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. - // If your environment is not supported or you settled on a specific environment, switch out the adapter. - // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter({ - fallback: '200.html' // may differ from host to host - }) - } -}; -export default config; diff --git a/web/tailwind.config.cjs b/web/tailwind.config.cjs deleted file mode 100644 index 14d0f5b..0000000 --- a/web/tailwind.config.cjs +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import forms from '@tailwindcss/forms'; -import typography from '@tailwindcss/typography'; -import skeleton from '@skeletonlabs/skeleton/tailwind/skeleton.cjs'; - -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: 'class', - content: [ - './src/**/*.{html,js,svelte,ts}', - join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}') - ], - theme: { - extend: {} - }, - plugins: [forms, typography, ...skeleton()] -}; diff --git a/web/tests/example.spec.ts b/web/tests/example.spec.ts deleted file mode 100644 index 57b3da9..0000000 --- a/web/tests/example.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test('has title', async ({ page }) => { - await page.goto('https://playwright.dev/'); - - // Expect a title "to contain" a substring. - await expect(page).toHaveTitle(/Playwright/); -}); - -test('register and login flow', async ({ page }) => { - await page.goto('https://local.bubbli.org/'); - await page.getByRole('link', { name: 'Register' }).click(); - await page.getByPlaceholder('Jay Smith').fill('test'); - await page.getByPlaceholder('Jay Smith').press('Tab'); - await page.getByPlaceholder('jsmith').fill('test'); - await page.getByPlaceholder('jsmith').press('Tab'); - await page.getByPlaceholder('jaysmith@example.com').fill('test11@example.com'); - await page.getByRole('button', { name: 'Next →' }).click(); - await page.getByPlaceholder('Password').click(); - await page.getByPlaceholder('Password').fill('testtest'); - await page.getByRole('button', { name: 'Complete' }).click(); - await page.getByText('??').click(); - await page.getByPlaceholder('Lorem ipsum dolor sit amet').click(); - await page.getByPlaceholder('Lorem ipsum dolor sit amet').fill('testtest'); - await page.getByRole('button', { name: 'Submit' }).click(); - await page.getByText('??').click(); - await page.getByRole('button', { name: 'Log Out' }).click(); - await page.getByPlaceholder('Email address').click(); - await page.getByPlaceholder('Email address').fill('test11@example.com'); - await page.getByRole('button', { name: 'Next →' }).click(); - await page.getByPlaceholder('Password').click(); - await page.getByPlaceholder('Password').fill('testtest'); - await page.getByRole('button', { name: 'Complete' }).click(); - await page.getByText('Content: testtest').click(); -}); - diff --git a/web/tsconfig.json b/web/tsconfig.json deleted file mode 100644 index 794b95b..0000000 --- a/web/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true - } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in -} diff --git a/web/vite.config.ts b/web/vite.config.ts deleted file mode 100644 index 0131ff9..0000000 --- a/web/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { sveltekit } from '@sveltejs/kit/vite'; -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - plugins: [sveltekit()], - test: { - include: ['src/**/*.{test,spec}.{js,ts}'] - } -});