Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

elixir: move to umbrella

+334 -714
+2 -1
.envrc
··· 26 26 27 27 # shellcheck disable=SC2089 28 28 ERL_AFLAGS="-kernel shell_history enabled -kernel shell_history_file_bytes 1024000 -kernel shell_history_path '\"$XDG_CACHE_HOME/erlang-history/$PWD\"'" 29 - # shellcheck disable=SC2090 29 + # # shellcheck disable=SC2090 30 30 export ERL_AFLAGS 31 + export SOWER_AGENT_ACCESS_TOKEN_FILE=$PWD/.dev-api-token
+2 -9
.formatter.exs
··· 1 1 [ 2 - import_deps: [ 3 - :ecto, 4 - :ecto_sql, 5 - :open_api_spex, 6 - :phoenix 7 - ], 8 - subdirectories: ["priv/*/migrations"], 9 - plugins: [Phoenix.LiveView.HTMLFormatter], 10 - inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"] 2 + inputs: ["mix.exs", "config/*.exs"], 3 + subdirectories: ["apps/*"] 11 4 ]
-8
agent/.envrc
··· 1 - source_up 2 - 3 - export SOWER_AGENT_ACCESS_TOKEN_FILE=$PWD/../.dev-api-token 4 - 5 - # shellcheck disable=SC2089 6 - ERL_AFLAGS="-kernel shell_history enabled -kernel shell_history_file_bytes 1024000 -kernel shell_history_path '\"$XDG_CACHE_HOME/erlang-history/$PWD\"'" 7 - # shellcheck disable=SC2090 8 - export ERL_AFLAGS
agent/.formatter.exs apps/sower_agent/.formatter.exs
-1
agent/.gitignore apps/sower_agent/.gitignore
··· 21 21 22 22 # Temporary files, for example, from tests. 23 23 /tmp/ 24 - data/
agent/README.md apps/sower_agent/README.md
-3
agent/config/config.exs
··· 1 - import Config 2 - 3 - import_config "#{config_env()}.exs"
-10
agent/config/dev.exs
··· 1 - import Config 2 - 3 - config :sower_agent, SowerAgent.SocketClient, 4 - uri: "ws://localhost:7150/agent/websocket", 5 - reconnect_after_msec: [200, 500, 1_000, 2_000] 6 - 7 - config :sower_agent, SowerAgent.Storage, file: "./data/storage.etf" 8 - 9 - config :exsync, 10 - reload_callback: {SowerAgent.SocketClient, :restart, []}
agent/config/prod.exs

This is a binary file and will not be displayed.

agent/config/runtime.exs config/runtime_agent.exs
-5
agent/config/test.exs
··· 1 - import Config 2 - 3 - config :sower_agent, SocketClient, 4 - uri: "ws://example.org/socket/websocket", 5 - reconnect_after_msec: [200, 500, 1_000, 2_000]
-396
agent/deps.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - beamPackages, 5 - overrides ? (x: y: { }), 6 - }: 7 - 8 - let 9 - buildMix = lib.makeOverridable beamPackages.buildMix; 10 - buildRebar3 = lib.makeOverridable beamPackages.buildRebar3; 11 - 12 - workarounds = { 13 - portCompiler = _unusedArgs: old: { 14 - buildPlugins = [ pkgs.beamPackages.pc ]; 15 - }; 16 - 17 - rustlerPrecompiled = 18 - { 19 - toolchain ? null, 20 - ... 21 - }: 22 - old: 23 - let 24 - extendedPkgs = pkgs.extend fenixOverlay; 25 - fenixOverlay = import "${ 26 - fetchTarball { 27 - url = "https://github.com/nix-community/fenix/archive/056c9393c821a4df356df6ce7f14c722dc8717ec.tar.gz"; 28 - sha256 = "sha256:1cdfh6nj81gjmn689snigidyq7w98gd8hkl5rvhly6xj7vyppmnd"; 29 - } 30 - }/overlay.nix"; 31 - nativeDir = "${old.src}/native/${with builtins; head (attrNames (readDir "${old.src}/native"))}"; 32 - fenix = 33 - if toolchain == null then 34 - extendedPkgs.fenix.stable 35 - else 36 - extendedPkgs.fenix.fromToolchainName toolchain; 37 - native = 38 - (extendedPkgs.makeRustPlatform { 39 - inherit (fenix) cargo rustc; 40 - }).buildRustPackage 41 - { 42 - pname = "${old.packageName}-native"; 43 - version = old.version; 44 - src = nativeDir; 45 - cargoLock = { 46 - lockFile = "${nativeDir}/Cargo.lock"; 47 - }; 48 - nativeBuildInputs = [ 49 - extendedPkgs.cmake 50 - ] ++ extendedPkgs.lib.lists.optional extendedPkgs.stdenv.isDarwin extendedPkgs.darwin.IOKit; 51 - doCheck = false; 52 - }; 53 - 54 - in 55 - { 56 - nativeBuildInputs = [ extendedPkgs.cargo ]; 57 - 58 - env.RUSTLER_PRECOMPILED_FORCE_BUILD_ALL = "true"; 59 - env.RUSTLER_PRECOMPILED_GLOBAL_CACHE_PATH = "unused-but-required"; 60 - 61 - preConfigure = '' 62 - mkdir -p priv/native 63 - for lib in ${native}/lib/* 64 - do 65 - ln -s "$lib" "priv/native/$(basename "$lib")" 66 - done 67 - ''; 68 - 69 - buildPhase = '' 70 - suggestion() { 71 - echo "***********************************************" 72 - echo " deps_nix " 73 - echo 74 - echo " Rust dependency build failed. " 75 - echo 76 - echo " If you saw network errors, you might need " 77 - echo " to disable compilation on the appropriate " 78 - echo " RustlerPrecompiled module in your " 79 - echo " application config. " 80 - echo 81 - echo " We think you need this: " 82 - echo 83 - echo -n " " 84 - grep -Rl 'use RustlerPrecompiled' lib \ 85 - | xargs grep 'defmodule' \ 86 - | sed 's/defmodule \(.*\) do/config :${old.packageName}, \1, skip_compilation?: true/' 87 - echo "***********************************************" 88 - exit 1 89 - } 90 - trap suggestion ERR 91 - ${old.buildPhase} 92 - ''; 93 - }; 94 - }; 95 - 96 - defaultOverrides = ( 97 - final: prev: 98 - 99 - let 100 - apps = { 101 - crc32cer = [ 102 - { 103 - name = "portCompiler"; 104 - } 105 - ]; 106 - explorer = [ 107 - { 108 - name = "rustlerPrecompiled"; 109 - toolchain = { 110 - name = "nightly-2024-11-01"; 111 - sha256 = "sha256-wq7bZ1/IlmmLkSa3GUJgK17dTWcKyf5A+ndS9yRwB88="; 112 - }; 113 - } 114 - ]; 115 - snappyer = [ 116 - { 117 - name = "portCompiler"; 118 - } 119 - ]; 120 - }; 121 - 122 - applyOverrides = 123 - appName: drv: 124 - let 125 - allOverridesForApp = builtins.foldl' ( 126 - acc: workaround: acc // (workarounds.${workaround.name} workaround) drv 127 - ) { } apps.${appName}; 128 - 129 - in 130 - if builtins.hasAttr appName apps then drv.override allOverridesForApp else drv; 131 - 132 - in 133 - builtins.mapAttrs applyOverrides prev 134 - ); 135 - 136 - self = packages // (defaultOverrides self packages) // (overrides self packages); 137 - 138 - packages = 139 - with beamPackages; 140 - with self; 141 - { 142 - 143 - cuid2_ex = 144 - let 145 - version = "0.2.0"; 146 - drv = buildMix { 147 - inherit version; 148 - name = "cuid2_ex"; 149 - appConfigPath = ./config; 150 - 151 - src = fetchHex { 152 - inherit version; 153 - pkg = "cuid2_ex"; 154 - sha256 = "49c3b81c1864f146e1cc3674ad3984ec16583c253e08d4d71d69b808e0054ea1"; 155 - }; 156 - }; 157 - in 158 - drv; 159 - 160 - decimal = 161 - let 162 - version = "2.3.0"; 163 - drv = buildMix { 164 - inherit version; 165 - name = "decimal"; 166 - appConfigPath = ./config; 167 - 168 - src = fetchHex { 169 - inherit version; 170 - pkg = "decimal"; 171 - sha256 = "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"; 172 - }; 173 - }; 174 - in 175 - drv; 176 - 177 - ecto = 178 - let 179 - version = "3.12.6"; 180 - drv = buildMix { 181 - inherit version; 182 - name = "ecto"; 183 - appConfigPath = ./config; 184 - 185 - src = fetchHex { 186 - inherit version; 187 - pkg = "ecto"; 188 - sha256 = "4c0cba01795463eebbcd9e4b5ef53c1ee8e68b9c482baef2a80de5a61e7a57fe"; 189 - }; 190 - 191 - beamDeps = [ 192 - decimal 193 - jason 194 - telemetry 195 - ]; 196 - }; 197 - in 198 - drv; 199 - 200 - hpax = 201 - let 202 - version = "1.0.3"; 203 - drv = buildMix { 204 - inherit version; 205 - name = "hpax"; 206 - appConfigPath = ./config; 207 - 208 - src = fetchHex { 209 - inherit version; 210 - pkg = "hpax"; 211 - sha256 = "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"; 212 - }; 213 - }; 214 - in 215 - drv; 216 - 217 - jason = 218 - let 219 - version = "1.4.4"; 220 - drv = buildMix { 221 - inherit version; 222 - name = "jason"; 223 - appConfigPath = ./config; 224 - 225 - src = fetchHex { 226 - inherit version; 227 - pkg = "jason"; 228 - sha256 = "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"; 229 - }; 230 - 231 - beamDeps = [ 232 - decimal 233 - ]; 234 - }; 235 - in 236 - drv; 237 - 238 - mint = 239 - let 240 - version = "1.7.1"; 241 - drv = buildMix { 242 - inherit version; 243 - name = "mint"; 244 - appConfigPath = ./config; 245 - 246 - src = fetchHex { 247 - inherit version; 248 - pkg = "mint"; 249 - sha256 = "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"; 250 - }; 251 - 252 - beamDeps = [ 253 - hpax 254 - ]; 255 - }; 256 - in 257 - drv; 258 - 259 - mint_web_socket = 260 - let 261 - version = "1.0.4"; 262 - drv = buildMix { 263 - inherit version; 264 - name = "mint_web_socket"; 265 - appConfigPath = ./config; 266 - 267 - src = fetchHex { 268 - inherit version; 269 - pkg = "mint_web_socket"; 270 - sha256 = "027d4c5529c45a4ba0ce27a01c0f35f284a5468519c045ca15f43decb360a991"; 271 - }; 272 - 273 - beamDeps = [ 274 - mint 275 - ]; 276 - }; 277 - in 278 - drv; 279 - 280 - nimble_options = 281 - let 282 - version = "1.1.1"; 283 - drv = buildMix { 284 - inherit version; 285 - name = "nimble_options"; 286 - appConfigPath = ./config; 287 - 288 - src = fetchHex { 289 - inherit version; 290 - pkg = "nimble_options"; 291 - sha256 = "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"; 292 - }; 293 - }; 294 - in 295 - drv; 296 - 297 - slipstream = 298 - let 299 - version = "1.2.0"; 300 - drv = buildMix { 301 - inherit version; 302 - name = "slipstream"; 303 - appConfigPath = ./config; 304 - 305 - src = fetchHex { 306 - inherit version; 307 - pkg = "slipstream"; 308 - sha256 = "f2fceddbb3c97331d348586e77c6425f4d150242dfaf392d22e8bd22f93d1f1e"; 309 - }; 310 - 311 - beamDeps = [ 312 - jason 313 - mint_web_socket 314 - nimble_options 315 - telemetry 316 - ]; 317 - }; 318 - in 319 - drv; 320 - 321 - telemetry = 322 - let 323 - version = "1.3.0"; 324 - drv = buildRebar3 { 325 - inherit version; 326 - name = "telemetry"; 327 - 328 - src = fetchHex { 329 - inherit version; 330 - pkg = "telemetry"; 331 - sha256 = "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"; 332 - }; 333 - }; 334 - in 335 - drv; 336 - 337 - typed_struct_ctor = 338 - let 339 - version = "0.1.2"; 340 - drv = buildMix { 341 - inherit version; 342 - name = "typed_struct_ctor"; 343 - appConfigPath = ./config; 344 - 345 - src = fetchHex { 346 - inherit version; 347 - pkg = "typed_struct_ctor"; 348 - sha256 = "79695303f7402f1a5b92e5914446014020b234bbfa1fccc664bacdf47101567f"; 349 - }; 350 - 351 - beamDeps = [ 352 - ecto 353 - typed_struct_ecto_changeset 354 - typedstruct 355 - ]; 356 - }; 357 - in 358 - drv; 359 - 360 - typed_struct_ecto_changeset = 361 - let 362 - version = "1.1.0"; 363 - drv = buildMix { 364 - inherit version; 365 - name = "typed_struct_ecto_changeset"; 366 - appConfigPath = ./config; 367 - 368 - src = fetchHex { 369 - inherit version; 370 - pkg = "typed_struct_ecto_changeset"; 371 - sha256 = "10f56689b7ca7c5e96aceb49b08a30712a36b35f987ebc4d20be47177d53fa73"; 372 - }; 373 - }; 374 - in 375 - drv; 376 - 377 - typedstruct = 378 - let 379 - version = "0.5.3"; 380 - drv = buildMix { 381 - inherit version; 382 - name = "typedstruct"; 383 - appConfigPath = ./config; 384 - 385 - src = fetchHex { 386 - inherit version; 387 - pkg = "typedstruct"; 388 - sha256 = "b53b8186701417c0b2782bf02a2db5524f879b8488f91d1d83b97d84c2943432"; 389 - }; 390 - }; 391 - in 392 - drv; 393 - 394 - }; 395 - in 396 - self
agent/justfile apps/sower/justfile
agent/lib/sower_agent.ex apps/sower_agent/lib/sower_agent.ex
agent/lib/sower_agent/application.ex apps/sower_agent/lib/sower_agent/application.ex
agent/lib/sower_agent/config.ex apps/sower_agent/lib/sower_agent/config.ex
agent/lib/sower_agent/socket_client.ex apps/sower_agent/lib/sower_agent/socket_client.ex
agent/lib/sower_agent/storage.ex apps/sower_agent/lib/sower_agent/storage.ex
+7 -3
agent/mix.exs apps/sower_agent/mix.exs
··· 4 4 def project do 5 5 [ 6 6 app: :sower_agent, 7 - version: "0.1.0", 7 + build_path: "../../_build", 8 + config_path: "../../config/config.exs", 9 + deps: deps(), 10 + deps_path: "../../deps", 8 11 elixir: "~> 1.18", 12 + lockfile: "../../mix.lock", 9 13 start_permanent: Mix.env() == :prod, 10 - deps: deps() 14 + version: SowerUmbrella.MixProject.project()[:version] 11 15 ] 12 16 end 13 17 ··· 30 34 {:slipstream, "~> 1.0"}, 31 35 # load typedstruct before typed_struct_ecto_changeset 32 36 {:typedstruct, "~> 0.5"}, 33 - {:sower_client, path: "../client-elixir"} 37 + {:sower_client, in_umbrella: true} 34 38 ] 35 39 end 36 40 end
-71
agent/mix.lock
··· 1 - %{ 2 - "argon2": {:hex, :argon2, "1.2.0", "7660b3aba6b46d4f0a7a4984e184e2ca743b12d226c2a9c83f740365900d9cb5", [:rebar3], [], "hexpm", "76ae94bee3eee9a34079e92993c9fb3f49fbd9976680452cc84d0335244911a3"}, 3 - "bandit": {:hex, :bandit, "1.7.0", "d1564f30553c97d3e25f9623144bb8df11f3787a26733f00b21699a128105c0c", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [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", "3e2f7a98c7a11f48d9d8c037f7177cd39778e74d55c7af06fe6227c742a8168a"}, 4 - "castore": {:hex, :castore, "1.0.14", "4582dd7d630b48cf5e1ca8d3d42494db51e406b7ba704e81fbd401866366896a", [:mix], [], "hexpm", "7bc1b65249d31701393edaaac18ec8398d8974d52c647b7904d01b964137b9f4"}, 5 - "cloak": {:hex, :cloak, "1.1.4", "aba387b22ea4d80d92d38ab1890cc528b06e0e7ef2a4581d71c3fdad59e997e7", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "92b20527b9aba3d939fab0dd32ce592ff86361547cfdc87d74edce6f980eb3d7"}, 6 - "cloak_ecto": {:hex, :cloak_ecto, "1.3.0", "0de127c857d7452ba3c3367f53fb814b0410ff9c680a8d20fbe8b9a3c57a1118", [:mix], [{:cloak, "~> 1.1.1", [hex: :cloak, repo: "hexpm", optional: false]}, {:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "314beb0c123b8a800418ca1d51065b27ba3b15f085977e65c0f7b2adab2de1cc"}, 7 - "cuid2_ex": {:hex, :cuid2_ex, "0.2.0", "b594696ceef7367f8bee7be0a4b07227755e90a1740d6cc73e7670d70e5454d4", [:mix], [], "hexpm", "49c3b81c1864f146e1cc3674ad3984ec16583c253e08d4d71d69b808e0054ea1"}, 8 - "db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"}, 9 - "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, 10 - "deps_nix": {:hex, :deps_nix, "2.2.0", "648321171b7152ba1a980b5767af553bfa52a86dcfa1f72efa576f18b363b374", [:mix], [{:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "cc302e2b3edc51dc658b32552f3bbef276f722f78936ac923b38fa60f899f645"}, 11 - "ecto": {:hex, :ecto, "3.12.6", "8bf762dc5b87d85b7aca7ad5fe31ef8142a84cea473a3381eb933bd925751300", [: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", "4c0cba01795463eebbcd9e4b5ef53c1ee8e68b9c482baef2a80de5a61e7a57fe"}, 12 - "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"}, 13 - "enough": {:hex, :enough, "0.1.0", "0254710c52d324e2dadde54cb56fbb80a792c2eb285669b8379efd0752bf89f0", [:rebar3], [], "hexpm", "0460c7abda5f5e0ea592b12bc6976b8a5c4b96e42f332059cd396525374bf9a1"}, 14 - "esbuild": {:hex, :esbuild, "0.10.0", "b0aa3388a1c23e727c5a3e7427c932d89ee791746b0081bbe56103e9ef3d291f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "468489cda427b974a7cc9f03ace55368a83e1a7be12fba7e30969af78e5f8c70"}, 15 - "ex_json_schema": {:hex, :ex_json_schema, "0.11.1", "b593f92937a095f66054bb318681397dfe7304e7d2b6b1a7534ea3aa40024f8c", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "32d651a575a6ce2fd613f140b0fef8dd0acc7cf8e8bcd29a3a1be5c945700dd5"}, 16 - "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"}, 17 - "exsync": {:hex, :exsync, "0.4.1", "0a14fe4bfcb80a509d8a0856be3dd070fffe619b9ba90fec13c58b316c176594", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "cefb22aa805ec97ffc5b75a4e1dc54bcaf781e8b32564bf74abbe5803d1b5178"}, 18 - "file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"}, 19 - "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"}, 20 - "gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"}, 21 - "glob_ex": {:hex, :glob_ex, "0.1.11", "cb50d3f1ef53f6ca04d6252c7fde09fd7a1cf63387714fe96f340a1349e62c93", [:mix], [], "hexpm", "342729363056e3145e61766b416769984c329e4378f1d558b63e341020525de4"}, 22 - "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, 23 - "igniter": {:hex, :igniter, "0.6.7", "4e183afc59d89289e223c4282fd3e9bb39b82e28d0aa6d3369f70fbd3e21a243", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:phx_new, "~> 1.7", [hex: :phx_new, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:rewrite, ">= 1.1.1 and < 2.0.0-0", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}], "hexpm", "43b0a584dc84fd1320772c87047355b604ed2bcdd25392b17f7da8bdd09b61ac"}, 24 - "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, 25 - "joken": {:hex, :joken, "2.6.2", "5daaf82259ca603af4f0b065475099ada1b2b849ff140ccd37f4b6828ca6892a", [:mix], [{:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5134b5b0a6e37494e46dbf9e4dad53808e5e787904b7c73972651b51cce3d72b"}, 26 - "jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"}, 27 - "libcluster": {:hex, :libcluster, "3.3.3", "a4f17721a19004cfc4467268e17cff8b1f951befe428975dd4f6f7b84d927fe0", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "7c0a2275a0bb83c07acd17dab3c3bfb4897b145106750eeccc62d302e3bdfee5"}, 28 - "libcluster_consul": {:hex, :libcluster_consul, "1.3.0", "114c8a2d4fdcf3331cf96c42048d79eb3d3ffa2a6c983f68eb215e0717fe2f00", [:mix], [{:libcluster, "~> 3.3.1", [hex: :libcluster, repo: "hexpm", optional: false]}], "hexpm", "fb63bc580f931a5af041c582a565df52bca3c8005c2ada13cce71647e674da25"}, 29 - "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, 30 - "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [: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", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, 31 - "mint_web_socket": {:hex, :mint_web_socket, "1.0.4", "0b539116dbb3d3f861cdf5e15e269a933cb501c113a14db7001a3157d96ffafd", [:mix], [{:mint, ">= 1.4.1 and < 2.0.0-0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "027d4c5529c45a4ba0ce27a01c0f35f284a5468519c045ca15f43decb360a991"}, 32 - "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, 33 - "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, 34 - "oidcc": {:hex, :oidcc, "3.2.6", "d6fb6391721e83c6e1866d537a386be680dd76d673d1058cc78ac7ebfc723da4", [:mix, :rebar3], [{:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.2", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.1", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "0530b902adce9117e797af41801b41e5e3d2a0288839bf69f2b54b19914fc522"}, 35 - "open_api_spex": {:hex, :open_api_spex, "3.21.2", "6a704f3777761feeb5657340250d6d7332c545755116ca98f33d4b875777e1e5", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0 or ~> 6.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "f42ae6ed668b895ebba3e02773cfb4b41050df26f803f2ef634c72a7687dc387"}, 36 - "owl": {:hex, :owl, "0.12.2", "65906b525e5c3ef51bab6cba7687152be017aebe1da077bb719a5ee9f7e60762", [:mix], [{:ucwidth, "~> 0.2", [hex: :ucwidth, repo: "hexpm", optional: true]}], "hexpm", "6398efa9e1fea70a04d24231e10dcd66c1ac1aa2da418d20ef5357ec61de2880"}, 37 - "permit": {:hex, :permit, "0.3.0", "9f54f86e9e19cbccd0779c68985a9b79eb9892a826d2edeb2997c60efe7a9f77", [:mix], [], "hexpm", "aac92428febf4e3856b90a267126a0c68183a86d7785ef70c9ea4bc07cc7764b"}, 38 - "permit_ecto": {:hex, :permit_ecto, "0.2.4", "bb087a3bbb8caafbd6247d357bb98800f979592718965ddad026f623bb942bbc", [:mix], [{:ecto, ">= 3.11.2 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, ">= 3.11.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:permit, "~> 0.2", [hex: :permit, repo: "hexpm", optional: false]}], "hexpm", "4cc4a600d7331483674f5837a3f203d7a9b1cc1faf805a49f9ff5fd9ccc21ee9"}, 39 - "phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [: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", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"}, 40 - "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.4", "dcf3483ab45bab4c15e3a47c34451392f64e433846b08469f5d16c2a4cd70052", [: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", "f5b8584c36ccc9b903948a696fc9b8b81102c79c7c0c751a9f00cdec55d5f2d7"}, 41 - "phoenix_html": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"}, 42 - "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [: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", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"}, 43 - "phoenix_live_view": {:hex, :phoenix_live_view, "1.0.17", "beeb16d83a7d3760f7ad463df94e83b087577665d2acc0bf2987cd7d9778068f", [: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 or ~> 1.8.0-rc", [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", "a4ca05c1eb6922c4d07a508a75bfa12c45e5f4d8f77ae83283465f02c53741e1"}, 44 - "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, 45 - "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"}, 46 - "plug": {:hex, :plug, "1.18.0", "d78df36c41f7e798f2edf1f33e1727eae438e9dd5d809a9997c463a108244042", [: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", "819f9e176d51e44dc38132e132fe0accaf6767eab7f0303431e404da8476cfa2"}, 47 - "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, 48 - "postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [: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", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"}, 49 - "req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"}, 50 - "rewrite": {:hex, :rewrite, "1.1.2", "f5a5d10f5fed1491a6ff48e078d4585882695962ccc9e6c779bae025d1f92eda", [:mix], [{:glob_ex, "~> 0.1", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}, {:text_diff, "~> 0.1", [hex: :text_diff, repo: "hexpm", optional: false]}], "hexpm", "7f8b94b1e3528d0a47b3e8b7bfeca559d2948a65fa7418a9ad7d7712703d39d4"}, 51 - "shortuuid": {:hex, :shortuuid, "4.1.0", "6f59470b78169c84a0cedbbe3fd4e83f0837a59877a4e1a7c0709916d54239e2", [:mix], [], "hexpm", "7336719118b3cca1ac73e95810199b0b9b7d00f9d71bd2c2d27fed4c4f74388e"}, 52 - "slipstream": {:hex, :slipstream, "1.2.0", "f4e820752339d86d2f15f4103e163f538e3bb9c7fe353225afd1255178e1f051", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mint_web_socket, "~> 0.2 or ~> 1.0", [hex: :mint_web_socket, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.1 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f2fceddbb3c97331d348586e77c6425f4d150242dfaf392d22e8bd22f93d1f1e"}, 53 - "sourceror": {:hex, :sourceror, "1.10.0", "38397dedbbc286966ec48c7af13e228b171332be1ad731974438c77791945ce9", [:mix], [], "hexpm", "29dbdfc92e04569c9d8e6efdc422fc1d815f4bd0055dc7c51b8800fb75c4b3f1"}, 54 - "spitfire": {:hex, :spitfire, "0.2.1", "29e154873f05444669c7453d3d931820822cbca5170e88f0f8faa1de74a79b47", [:mix], [], "hexpm", "6eeed75054a38341b2e1814d41bb0a250564092358de2669fdb57ff88141d91b"}, 55 - "systemd": {:hex, :systemd, "0.6.2", "aaa24f1e3e6cb978c45369768b1abd766a0dbff637ed61254ca64797bcec9963", [:rebar3], [{:enough, "~> 0.1.0", [hex: :enough, repo: "hexpm", optional: false]}], "hexpm", "5062b911800c1ab05157c7bf9a9fbe23dd24c58891c87fd12d2e3ed8fc1708b8"}, 56 - "tailwind": {:hex, :tailwind, "0.3.1", "a89d2835c580748c7a975ad7dd3f2ea5e63216dc16d44f9df492fbd12c094bed", [:mix], [], "hexpm", "98a45febdf4a87bc26682e1171acdedd6317d0919953c353fcd1b4f9f4b676a2"}, 57 - "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, 58 - "telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"}, 59 - "telemetry_poller": {:hex, :telemetry_poller, "1.2.0", "ba82e333215aed9dd2096f93bd1d13ae89d249f82760fcada0850ba33bac154b", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7216e21a6c326eb9aa44328028c34e9fd348fb53667ca837be59d0aa2a0156e8"}, 60 - "telemetry_registry": {:hex, :telemetry_registry, "0.3.2", "701576890320be6428189bff963e865e8f23e0ff3615eade8f78662be0fc003c", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7ed191eb1d115a3034af8e1e35e4e63d5348851d556646d46ca3d1b4e16bab9"}, 61 - "text_diff": {:hex, :text_diff, "0.1.0", "1caf3175e11a53a9a139bc9339bd607c47b9e376b073d4571c031913317fecaa", [:mix], [], "hexpm", "d1ffaaecab338e49357b6daa82e435f877e0649041ace7755583a0ea3362dbd7"}, 62 - "thousand_island": {:hex, :thousand_island, "1.3.14", "ad45ebed2577b5437582bcc79c5eccd1e2a8c326abf6a3464ab6c06e2055a34a", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d0d24a929d31cdd1d7903a4fe7f2409afeedff092d277be604966cd6aa4307ef"}, 63 - "typed_struct_ctor": {:hex, :typed_struct_ctor, "0.1.2", "00cc745439e99047615bb0700b43652311c199043293c13335151873505c5d01", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:typed_struct_ecto_changeset, "~> 1.0.0", [hex: :typed_struct_ecto_changeset, repo: "hexpm", optional: false]}, {:typedstruct, "~> 0.5.2", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "79695303f7402f1a5b92e5914446014020b234bbfa1fccc664bacdf47101567f"}, 64 - "typed_struct_ecto_changeset": {:hex, :typed_struct_ecto_changeset, "1.1.0", "dd1924c786798284e7e8f2844ea6638a293cdcf13573ad758c5b2cb36bf51288", [:mix], [], "hexpm", "10f56689b7ca7c5e96aceb49b08a30712a36b35f987ebc4d20be47177d53fa73"}, 65 - "typedstruct": {:hex, :typedstruct, "0.5.3", "d68ae424251a41b81a8d0c485328ab48edbd3858f3565bbdac21b43c056fc9b4", [:make, :mix], [], "hexpm", "b53b8186701417c0b2782bf02a2db5524f879b8488f91d1d83b97d84c2943432"}, 66 - "ueberauth": {:hex, :ueberauth, "0.10.8", "ba78fbcbb27d811a6cd06ad851793aaf7d27c3b30c9e95349c2c362b344cd8f0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f2d3172e52821375bccb8460e5fa5cb91cfd60b19b636b6e57e9759b6f8c10c1"}, 67 - "ueberauth_oidcc": {:hex, :ueberauth_oidcc, "0.4.1", "172f202c8e6731d30c2221f5ea67a2217c30f60436b6a236e745e978497e57d9", [:mix], [{:oidcc, "~> 3.2.0", [hex: :oidcc, repo: "hexpm", optional: false]}, {:plug, "~> 1.11", [hex: :plug, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.10", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "ba4447d428df74d5cff8b6717e1249163649d946d4aefd22f7445a9979adab54"}, 68 - "uuidv7": {:hex, :uuidv7, "1.0.0", "659179b2e248b98f96e7e988b882d369c055b6ae7a836237ccca52cd4d0f6988", [:mix], [{:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "0ecd337108456f7d8b1a9a54ef435443d3f8c10a5b685bd866ef9e396b444cbc"}, 69 - "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, 70 - "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"}, 71 - }
agent/test/sower_agent_test.exs apps/sower_agent/test/sower_agent_test.exs
agent/test/test_helper.exs apps/sower_agent/test/test_helper.exs
+11
apps/sower/.formatter.exs
··· 1 + [ 2 + import_deps: [ 3 + :ecto, 4 + :ecto_sql, 5 + :open_api_spex, 6 + :phoenix 7 + ], 8 + subdirectories: ["priv/*/migrations"], 9 + plugins: [Phoenix.LiveView.HTMLFormatter], 10 + inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"] 11 + ]
+38
apps/sower/.gitignore
··· 1 + # The directory Mix will write compiled artifacts to. 2 + /_build/ 3 + 4 + # If you run "mix test --cover", coverage assets end up here. 5 + /cover/ 6 + 7 + # The directory Mix downloads your dependencies sources to. 8 + /deps/ 9 + 10 + # Where 3rd-party dependencies like ExDoc output generated docs. 11 + /doc/ 12 + 13 + # Ignore .fetch files in case you like to edit your project deps locally. 14 + /.fetch 15 + 16 + # If the VM crashes, it generates a dump, let's ignore it too. 17 + erl_crash.dump 18 + 19 + # Also ignore archive artifacts (built via "mix archive.build"). 20 + *.ez 21 + 22 + # Temporary files, for example, from tests. 23 + /tmp/ 24 + 25 + # Ignore package tarball (built via "mix hex.build"). 26 + tester-*.tar 27 + 28 + # Ignore assets that are produced by build tools. 29 + /priv/static/assets/ 30 + /priv/static/images/ 31 + 32 + # Ignore digested assets cache. 33 + /priv/static/cache_manifest.json 34 + 35 + # In case you use Node.js/npm, you want to ignore these. 36 + npm-debug.log 37 + /assets/node_modules/ 38 +
+93
apps/sower/mix.exs
··· 1 + defmodule Sower.MixProject do 2 + use Mix.Project 3 + 4 + def project do 5 + [ 6 + aliases: aliases(), 7 + app: :sower, 8 + build_path: "../../_build", 9 + config_path: "../../config/config.exs", 10 + deps: deps(), 11 + deps_path: "../../deps", 12 + elixir: "~> 1.18", 13 + elixirc_paths: elixirc_paths(Mix.env()), 14 + lockfile: "../../mix.lock", 15 + start_permanent: Mix.env() == :prod, 16 + version: SowerUmbrella.MixProject.project()[:version] 17 + ] 18 + end 19 + 20 + def application do 21 + [ 22 + extra_applications: [:logger, :runtime_tools], 23 + mod: {Sower.Application, []} 24 + ] 25 + end 26 + 27 + defp deps do 28 + [ 29 + {:argon2, "~> 1.2"}, 30 + {:bandit, "~> 1.0"}, 31 + {:cloak_ecto, "~> 1.3.0"}, 32 + {:cuid2_ex, "~> 0.2.0"}, 33 + {:deps_nix, "~> 2.0", only: [:dev]}, 34 + {:ecto_sql, "~> 3.11"}, 35 + {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, 36 + {:ex_json_schema, "~> 0.11.1"}, 37 + {:faker, "~> 0.18", only: :test}, 38 + {:finch, "~> 0.13"}, 39 + {:floki, ">= 0.30.0", only: :test}, 40 + {:gettext, "~> 0.20"}, 41 + {:jason, "~> 1.2"}, 42 + {:joken, "~> 2.6.1"}, 43 + {:libcluster_consul, "~> 1.3"}, 44 + {:mime, "~> 2.0.6"}, 45 + {:mix_test_watch, "~> 1.0", only: [:dev, :test], runtime: false}, 46 + {:open_api_spex, "~> 3.20"}, 47 + {:permit, "~> 0.3.0"}, 48 + {:permit_ecto, "~> 0.2.3"}, 49 + {:phoenix, "~> 1.7.7"}, 50 + {:phoenix_ecto, "~> 4.4"}, 51 + {:phoenix_html, "~> 4.1"}, 52 + {:phoenix_live_dashboard, "~> 0.8.0"}, 53 + {:phoenix_live_reload, "~> 1.2", only: :dev}, 54 + {:phoenix_live_view, "~> 1.0.0"}, 55 + {:postgrex, ">= 0.0.0"}, 56 + {:req, ">= 0.5.8"}, 57 + {:shortuuid, "~> 4.0"}, 58 + # load typedstruct before typed_struct_ecto_changeset 59 + {:typedstruct, "~> 0.5"}, 60 + {:sower_client, in_umbrella: true}, 61 + {:systemd, "~> 0.6"}, 62 + {:tailwind, "~> 0.3.0", runtime: Mix.env() == :dev}, 63 + {:telemetry_metrics, "~> 1.1.0"}, 64 + {:telemetry_poller, "~> 1.1"}, 65 + {:ueberauth, "~> 0.10"}, 66 + {:ueberauth_oidcc, "~> 0.3"}, 67 + {:uuidv7, "~> 1.0.0"} 68 + ] 69 + end 70 + 71 + defp aliases do 72 + [ 73 + setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"], 74 + "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], 75 + "ecto.reset": ["ecto.drop", "ecto.setup"], 76 + test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"], 77 + "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"], 78 + "assets.build": [ 79 + # "tailwind sower", 80 + # "esbuild sower" 81 + ], 82 + "assets.deploy": [ 83 + "tailwind sower --minify" 84 + # "esbuild sower --minify", 85 + # "phx.digest" 86 + ] 87 + ] 88 + end 89 + 90 + # Specifies which paths to compile per environment. 91 + defp elixirc_paths(:test), do: ["lib", "test/support"] 92 + defp elixirc_paths(_), do: ["lib"] 93 + end
assets/css/app.css apps/sower/assets/css/app.css
assets/js/app.js apps/sower/assets/js/app.js
assets/tailwind.config.js apps/sower/assets/tailwind.config.js
assets/vendor/heroicons/LICENSE.md apps/sower/assets/vendor/heroicons/LICENSE.md
assets/vendor/heroicons/UPGRADE.md apps/sower/assets/vendor/heroicons/UPGRADE.md
assets/vendor/heroicons/optimized/20/solid/academic-cap.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/academic-cap.svg
assets/vendor/heroicons/optimized/20/solid/adjustments-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/adjustments-horizontal.svg
assets/vendor/heroicons/optimized/20/solid/adjustments-vertical.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/adjustments-vertical.svg
assets/vendor/heroicons/optimized/20/solid/archive-box-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/archive-box-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/archive-box-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/archive-box-x-mark.svg
assets/vendor/heroicons/optimized/20/solid/archive-box.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/archive-box.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-circle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square-stack.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-on-square.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down-tray.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down-tray.svg
assets/vendor/heroicons/optimized/20/solid/arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-left-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-left-on-rectangle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-long-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-long-down.svg
assets/vendor/heroicons/optimized/20/solid/arrow-long-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-long-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-long-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-long-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-long-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-long-up.svg
assets/vendor/heroicons/optimized/20/solid/arrow-path-rounded-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-path-rounded-square.svg
assets/vendor/heroicons/optimized/20/solid/arrow-path.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-path.svg
assets/vendor/heroicons/optimized/20/solid/arrow-right-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-right-circle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-right-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-right-on-rectangle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-small-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-small-down.svg
assets/vendor/heroicons/optimized/20/solid/arrow-small-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-small-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-small-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-small-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-small-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-small-up.svg
assets/vendor/heroicons/optimized/20/solid/arrow-top-right-on-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-top-right-on-square.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-circle.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square-stack.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-on-square.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up-tray.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up-tray.svg
assets/vendor/heroicons/optimized/20/solid/arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-up.svg
assets/vendor/heroicons/optimized/20/solid/arrow-uturn-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-down.svg
assets/vendor/heroicons/optimized/20/solid/arrow-uturn-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-left.svg
assets/vendor/heroicons/optimized/20/solid/arrow-uturn-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-right.svg
assets/vendor/heroicons/optimized/20/solid/arrow-uturn-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrow-uturn-up.svg
assets/vendor/heroicons/optimized/20/solid/arrows-pointing-in.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-in.svg
assets/vendor/heroicons/optimized/20/solid/arrows-pointing-out.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrows-pointing-out.svg
assets/vendor/heroicons/optimized/20/solid/arrows-right-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrows-right-left.svg
assets/vendor/heroicons/optimized/20/solid/arrows-up-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/arrows-up-down.svg
assets/vendor/heroicons/optimized/20/solid/at-symbol.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/at-symbol.svg
assets/vendor/heroicons/optimized/20/solid/backspace.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/backspace.svg
assets/vendor/heroicons/optimized/20/solid/backward.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/backward.svg
assets/vendor/heroicons/optimized/20/solid/banknotes.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/banknotes.svg
assets/vendor/heroicons/optimized/20/solid/bars-2.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-2.svg
assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-left.svg
assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-3-bottom-right.svg
assets/vendor/heroicons/optimized/20/solid/bars-3-center-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-3-center-left.svg
assets/vendor/heroicons/optimized/20/solid/bars-3.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-3.svg
assets/vendor/heroicons/optimized/20/solid/bars-4.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-4.svg
assets/vendor/heroicons/optimized/20/solid/bars-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/bars-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bars-arrow-up.svg
assets/vendor/heroicons/optimized/20/solid/battery-0.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/battery-0.svg
assets/vendor/heroicons/optimized/20/solid/battery-100.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/battery-100.svg
assets/vendor/heroicons/optimized/20/solid/battery-50.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/battery-50.svg
assets/vendor/heroicons/optimized/20/solid/beaker.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/beaker.svg
assets/vendor/heroicons/optimized/20/solid/bell-alert.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bell-alert.svg
assets/vendor/heroicons/optimized/20/solid/bell-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bell-slash.svg
assets/vendor/heroicons/optimized/20/solid/bell-snooze.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bell-snooze.svg
assets/vendor/heroicons/optimized/20/solid/bell.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bell.svg
assets/vendor/heroicons/optimized/20/solid/bolt-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bolt-slash.svg
assets/vendor/heroicons/optimized/20/solid/bolt.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bolt.svg
assets/vendor/heroicons/optimized/20/solid/book-open.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/book-open.svg
assets/vendor/heroicons/optimized/20/solid/bookmark-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bookmark-slash.svg
assets/vendor/heroicons/optimized/20/solid/bookmark-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bookmark-square.svg
assets/vendor/heroicons/optimized/20/solid/bookmark.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bookmark.svg
assets/vendor/heroicons/optimized/20/solid/briefcase.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/briefcase.svg
assets/vendor/heroicons/optimized/20/solid/bug-ant.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/bug-ant.svg
assets/vendor/heroicons/optimized/20/solid/building-library.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/building-library.svg
assets/vendor/heroicons/optimized/20/solid/building-office-2.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/building-office-2.svg
assets/vendor/heroicons/optimized/20/solid/building-office.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/building-office.svg
assets/vendor/heroicons/optimized/20/solid/building-storefront.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/building-storefront.svg
assets/vendor/heroicons/optimized/20/solid/cake.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cake.svg
assets/vendor/heroicons/optimized/20/solid/calculator.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/calculator.svg
assets/vendor/heroicons/optimized/20/solid/calendar-days.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/calendar-days.svg
assets/vendor/heroicons/optimized/20/solid/calendar.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/calendar.svg
assets/vendor/heroicons/optimized/20/solid/camera.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/camera.svg
assets/vendor/heroicons/optimized/20/solid/chart-bar-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chart-bar-square.svg
assets/vendor/heroicons/optimized/20/solid/chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chart-bar.svg
assets/vendor/heroicons/optimized/20/solid/chart-pie.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chart-pie.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center-text.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center-text.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-bottom-center.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-ellipsis.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left-right.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-left.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left-ellipsis.svg
assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chat-bubble-oval-left.svg
assets/vendor/heroicons/optimized/20/solid/check-badge.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/check-badge.svg
assets/vendor/heroicons/optimized/20/solid/check-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/check-circle.svg
assets/vendor/heroicons/optimized/20/solid/check.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/check.svg
assets/vendor/heroicons/optimized/20/solid/chevron-double-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-double-down.svg
assets/vendor/heroicons/optimized/20/solid/chevron-double-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-double-left.svg
assets/vendor/heroicons/optimized/20/solid/chevron-double-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-double-right.svg
assets/vendor/heroicons/optimized/20/solid/chevron-double-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-double-up.svg
assets/vendor/heroicons/optimized/20/solid/chevron-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-down.svg
assets/vendor/heroicons/optimized/20/solid/chevron-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-left.svg
assets/vendor/heroicons/optimized/20/solid/chevron-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-right.svg
assets/vendor/heroicons/optimized/20/solid/chevron-up-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-up-down.svg
assets/vendor/heroicons/optimized/20/solid/chevron-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/chevron-up.svg
assets/vendor/heroicons/optimized/20/solid/circle-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/circle-stack.svg
assets/vendor/heroicons/optimized/20/solid/clipboard-document-check.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/clipboard-document-check.svg
assets/vendor/heroicons/optimized/20/solid/clipboard-document-list.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/clipboard-document-list.svg
assets/vendor/heroicons/optimized/20/solid/clipboard-document.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/clipboard-document.svg
assets/vendor/heroicons/optimized/20/solid/clipboard.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/clipboard.svg
assets/vendor/heroicons/optimized/20/solid/clock.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/clock.svg
assets/vendor/heroicons/optimized/20/solid/cloud-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/cloud-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cloud-arrow-up.svg
assets/vendor/heroicons/optimized/20/solid/cloud.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cloud.svg
assets/vendor/heroicons/optimized/20/solid/code-bracket-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/code-bracket-square.svg
assets/vendor/heroicons/optimized/20/solid/code-bracket.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/code-bracket.svg
assets/vendor/heroicons/optimized/20/solid/cog-6-tooth.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cog-6-tooth.svg
assets/vendor/heroicons/optimized/20/solid/cog-8-tooth.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cog-8-tooth.svg
assets/vendor/heroicons/optimized/20/solid/cog.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cog.svg
assets/vendor/heroicons/optimized/20/solid/command-line.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/command-line.svg
assets/vendor/heroicons/optimized/20/solid/computer-desktop.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/computer-desktop.svg
assets/vendor/heroicons/optimized/20/solid/cpu-chip.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cpu-chip.svg
assets/vendor/heroicons/optimized/20/solid/credit-card.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/credit-card.svg
assets/vendor/heroicons/optimized/20/solid/cube-transparent.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cube-transparent.svg
assets/vendor/heroicons/optimized/20/solid/cube.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cube.svg
assets/vendor/heroicons/optimized/20/solid/currency-bangladeshi.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-bangladeshi.svg
assets/vendor/heroicons/optimized/20/solid/currency-dollar.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-dollar.svg
assets/vendor/heroicons/optimized/20/solid/currency-euro.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-euro.svg
assets/vendor/heroicons/optimized/20/solid/currency-pound.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-pound.svg
assets/vendor/heroicons/optimized/20/solid/currency-rupee.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-rupee.svg
assets/vendor/heroicons/optimized/20/solid/currency-yen.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/currency-yen.svg
assets/vendor/heroicons/optimized/20/solid/cursor-arrow-rays.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-rays.svg
assets/vendor/heroicons/optimized/20/solid/cursor-arrow-ripple.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/cursor-arrow-ripple.svg
assets/vendor/heroicons/optimized/20/solid/device-phone-mobile.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/device-phone-mobile.svg
assets/vendor/heroicons/optimized/20/solid/device-tablet.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/device-tablet.svg
assets/vendor/heroicons/optimized/20/solid/document-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/document-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-arrow-up.svg
assets/vendor/heroicons/optimized/20/solid/document-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-chart-bar.svg
assets/vendor/heroicons/optimized/20/solid/document-check.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-check.svg
assets/vendor/heroicons/optimized/20/solid/document-duplicate.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-duplicate.svg
assets/vendor/heroicons/optimized/20/solid/document-magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-magnifying-glass.svg
assets/vendor/heroicons/optimized/20/solid/document-minus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-minus.svg
assets/vendor/heroicons/optimized/20/solid/document-plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-plus.svg
assets/vendor/heroicons/optimized/20/solid/document-text.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document-text.svg
assets/vendor/heroicons/optimized/20/solid/document.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/document.svg
assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal-circle.svg
assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/ellipsis-horizontal.svg
assets/vendor/heroicons/optimized/20/solid/ellipsis-vertical.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/ellipsis-vertical.svg
assets/vendor/heroicons/optimized/20/solid/envelope-open.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/envelope-open.svg
assets/vendor/heroicons/optimized/20/solid/envelope.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/envelope.svg
assets/vendor/heroicons/optimized/20/solid/exclamation-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/exclamation-circle.svg
assets/vendor/heroicons/optimized/20/solid/exclamation-triangle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/exclamation-triangle.svg
assets/vendor/heroicons/optimized/20/solid/eye-dropper.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/eye-dropper.svg
assets/vendor/heroicons/optimized/20/solid/eye-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/eye-slash.svg
assets/vendor/heroicons/optimized/20/solid/eye.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/eye.svg
assets/vendor/heroicons/optimized/20/solid/face-frown.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/face-frown.svg
assets/vendor/heroicons/optimized/20/solid/face-smile.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/face-smile.svg
assets/vendor/heroicons/optimized/20/solid/film.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/film.svg
assets/vendor/heroicons/optimized/20/solid/finger-print.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/finger-print.svg
assets/vendor/heroicons/optimized/20/solid/fire.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/fire.svg
assets/vendor/heroicons/optimized/20/solid/flag.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/flag.svg
assets/vendor/heroicons/optimized/20/solid/folder-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/folder-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/folder-minus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/folder-minus.svg
assets/vendor/heroicons/optimized/20/solid/folder-open.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/folder-open.svg
assets/vendor/heroicons/optimized/20/solid/folder-plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/folder-plus.svg
assets/vendor/heroicons/optimized/20/solid/folder.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/folder.svg
assets/vendor/heroicons/optimized/20/solid/forward.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/forward.svg
assets/vendor/heroicons/optimized/20/solid/funnel.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/funnel.svg
assets/vendor/heroicons/optimized/20/solid/gif.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/gif.svg
assets/vendor/heroicons/optimized/20/solid/gift-top.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/gift-top.svg
assets/vendor/heroicons/optimized/20/solid/gift.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/gift.svg
assets/vendor/heroicons/optimized/20/solid/globe-alt.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/globe-alt.svg
assets/vendor/heroicons/optimized/20/solid/globe-americas.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/globe-americas.svg
assets/vendor/heroicons/optimized/20/solid/globe-asia-australia.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/globe-asia-australia.svg
assets/vendor/heroicons/optimized/20/solid/globe-europe-africa.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/globe-europe-africa.svg
assets/vendor/heroicons/optimized/20/solid/hand-raised.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/hand-raised.svg
assets/vendor/heroicons/optimized/20/solid/hand-thumb-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/hand-thumb-down.svg
assets/vendor/heroicons/optimized/20/solid/hand-thumb-up.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/hand-thumb-up.svg
assets/vendor/heroicons/optimized/20/solid/hashtag.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/hashtag.svg
assets/vendor/heroicons/optimized/20/solid/heart.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/heart.svg
assets/vendor/heroicons/optimized/20/solid/home-modern.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/home-modern.svg
assets/vendor/heroicons/optimized/20/solid/home.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/home.svg
assets/vendor/heroicons/optimized/20/solid/identification.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/identification.svg
assets/vendor/heroicons/optimized/20/solid/inbox-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/inbox-arrow-down.svg
assets/vendor/heroicons/optimized/20/solid/inbox-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/inbox-stack.svg
assets/vendor/heroicons/optimized/20/solid/inbox.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/inbox.svg
assets/vendor/heroicons/optimized/20/solid/information-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/information-circle.svg
assets/vendor/heroicons/optimized/20/solid/key.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/key.svg
assets/vendor/heroicons/optimized/20/solid/language.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/language.svg
assets/vendor/heroicons/optimized/20/solid/lifebuoy.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/lifebuoy.svg
assets/vendor/heroicons/optimized/20/solid/light-bulb.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/light-bulb.svg
assets/vendor/heroicons/optimized/20/solid/link.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/link.svg
assets/vendor/heroicons/optimized/20/solid/list-bullet.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/list-bullet.svg
assets/vendor/heroicons/optimized/20/solid/lock-closed.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/lock-closed.svg
assets/vendor/heroicons/optimized/20/solid/lock-open.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/lock-open.svg
assets/vendor/heroicons/optimized/20/solid/magnifying-glass-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-circle.svg
assets/vendor/heroicons/optimized/20/solid/magnifying-glass-minus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-minus.svg
assets/vendor/heroicons/optimized/20/solid/magnifying-glass-plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/magnifying-glass-plus.svg
assets/vendor/heroicons/optimized/20/solid/magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/magnifying-glass.svg
assets/vendor/heroicons/optimized/20/solid/map-pin.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/map-pin.svg
assets/vendor/heroicons/optimized/20/solid/map.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/map.svg
assets/vendor/heroicons/optimized/20/solid/megaphone.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/megaphone.svg
assets/vendor/heroicons/optimized/20/solid/microphone.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/microphone.svg
assets/vendor/heroicons/optimized/20/solid/minus-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/minus-circle.svg
assets/vendor/heroicons/optimized/20/solid/minus-small.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/minus-small.svg
assets/vendor/heroicons/optimized/20/solid/minus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/minus.svg
assets/vendor/heroicons/optimized/20/solid/moon.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/moon.svg
assets/vendor/heroicons/optimized/20/solid/musical-note.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/musical-note.svg
assets/vendor/heroicons/optimized/20/solid/newspaper.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/newspaper.svg
assets/vendor/heroicons/optimized/20/solid/no-symbol.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/no-symbol.svg
assets/vendor/heroicons/optimized/20/solid/paint-brush.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/paint-brush.svg
assets/vendor/heroicons/optimized/20/solid/paper-airplane.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/paper-airplane.svg
assets/vendor/heroicons/optimized/20/solid/paper-clip.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/paper-clip.svg
assets/vendor/heroicons/optimized/20/solid/pause-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/pause-circle.svg
assets/vendor/heroicons/optimized/20/solid/pause.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/pause.svg
assets/vendor/heroicons/optimized/20/solid/pencil-square.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/pencil-square.svg
assets/vendor/heroicons/optimized/20/solid/pencil.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/pencil.svg
assets/vendor/heroicons/optimized/20/solid/phone-arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/phone-arrow-down-left.svg
assets/vendor/heroicons/optimized/20/solid/phone-arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/phone-arrow-up-right.svg
assets/vendor/heroicons/optimized/20/solid/phone-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/phone-x-mark.svg
assets/vendor/heroicons/optimized/20/solid/phone.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/phone.svg
assets/vendor/heroicons/optimized/20/solid/photo.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/photo.svg
assets/vendor/heroicons/optimized/20/solid/play-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/play-circle.svg
assets/vendor/heroicons/optimized/20/solid/play-pause.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/play-pause.svg
assets/vendor/heroicons/optimized/20/solid/play.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/play.svg
assets/vendor/heroicons/optimized/20/solid/plus-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/plus-circle.svg
assets/vendor/heroicons/optimized/20/solid/plus-small.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/plus-small.svg
assets/vendor/heroicons/optimized/20/solid/plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/plus.svg
assets/vendor/heroicons/optimized/20/solid/power.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/power.svg
assets/vendor/heroicons/optimized/20/solid/presentation-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/presentation-chart-bar.svg
assets/vendor/heroicons/optimized/20/solid/presentation-chart-line.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/presentation-chart-line.svg
assets/vendor/heroicons/optimized/20/solid/printer.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/printer.svg
assets/vendor/heroicons/optimized/20/solid/puzzle-piece.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/puzzle-piece.svg
assets/vendor/heroicons/optimized/20/solid/qr-code.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/qr-code.svg
assets/vendor/heroicons/optimized/20/solid/question-mark-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/question-mark-circle.svg
assets/vendor/heroicons/optimized/20/solid/queue-list.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/queue-list.svg
assets/vendor/heroicons/optimized/20/solid/radio.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/radio.svg
assets/vendor/heroicons/optimized/20/solid/receipt-percent.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/receipt-percent.svg
assets/vendor/heroicons/optimized/20/solid/receipt-refund.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/receipt-refund.svg
assets/vendor/heroicons/optimized/20/solid/rectangle-group.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/rectangle-group.svg
assets/vendor/heroicons/optimized/20/solid/rectangle-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/rectangle-stack.svg
assets/vendor/heroicons/optimized/20/solid/rocket-launch.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/rocket-launch.svg
assets/vendor/heroicons/optimized/20/solid/rss.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/rss.svg
assets/vendor/heroicons/optimized/20/solid/scale.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/scale.svg
assets/vendor/heroicons/optimized/20/solid/scissors.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/scissors.svg
assets/vendor/heroicons/optimized/20/solid/server-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/server-stack.svg
assets/vendor/heroicons/optimized/20/solid/server.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/server.svg
assets/vendor/heroicons/optimized/20/solid/share.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/share.svg
assets/vendor/heroicons/optimized/20/solid/shield-check.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/shield-check.svg
assets/vendor/heroicons/optimized/20/solid/shield-exclamation.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/shield-exclamation.svg
assets/vendor/heroicons/optimized/20/solid/shopping-bag.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/shopping-bag.svg
assets/vendor/heroicons/optimized/20/solid/shopping-cart.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/shopping-cart.svg
assets/vendor/heroicons/optimized/20/solid/signal-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/signal-slash.svg
assets/vendor/heroicons/optimized/20/solid/signal.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/signal.svg
assets/vendor/heroicons/optimized/20/solid/sparkles.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/sparkles.svg
assets/vendor/heroicons/optimized/20/solid/speaker-wave.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/speaker-wave.svg
assets/vendor/heroicons/optimized/20/solid/speaker-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/speaker-x-mark.svg
assets/vendor/heroicons/optimized/20/solid/square-2-stack.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/square-2-stack.svg
assets/vendor/heroicons/optimized/20/solid/square-3-stack-3d.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/square-3-stack-3d.svg
assets/vendor/heroicons/optimized/20/solid/squares-2x2.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/squares-2x2.svg
assets/vendor/heroicons/optimized/20/solid/squares-plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/squares-plus.svg
assets/vendor/heroicons/optimized/20/solid/star.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/star.svg
assets/vendor/heroicons/optimized/20/solid/stop-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/stop-circle.svg
assets/vendor/heroicons/optimized/20/solid/stop.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/stop.svg
assets/vendor/heroicons/optimized/20/solid/sun.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/sun.svg
assets/vendor/heroicons/optimized/20/solid/swatch.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/swatch.svg
assets/vendor/heroicons/optimized/20/solid/table-cells.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/table-cells.svg
assets/vendor/heroicons/optimized/20/solid/tag.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/tag.svg
assets/vendor/heroicons/optimized/20/solid/ticket.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/ticket.svg
assets/vendor/heroicons/optimized/20/solid/trash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/trash.svg
assets/vendor/heroicons/optimized/20/solid/trophy.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/trophy.svg
assets/vendor/heroicons/optimized/20/solid/truck.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/truck.svg
assets/vendor/heroicons/optimized/20/solid/tv.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/tv.svg
assets/vendor/heroicons/optimized/20/solid/user-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/user-circle.svg
assets/vendor/heroicons/optimized/20/solid/user-group.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/user-group.svg
assets/vendor/heroicons/optimized/20/solid/user-minus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/user-minus.svg
assets/vendor/heroicons/optimized/20/solid/user-plus.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/user-plus.svg
assets/vendor/heroicons/optimized/20/solid/user.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/user.svg
assets/vendor/heroicons/optimized/20/solid/users.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/users.svg
assets/vendor/heroicons/optimized/20/solid/variable.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/variable.svg
assets/vendor/heroicons/optimized/20/solid/video-camera-slash.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/video-camera-slash.svg
assets/vendor/heroicons/optimized/20/solid/video-camera.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/video-camera.svg
assets/vendor/heroicons/optimized/20/solid/view-columns.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/view-columns.svg
assets/vendor/heroicons/optimized/20/solid/viewfinder-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/viewfinder-circle.svg
assets/vendor/heroicons/optimized/20/solid/wallet.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/wallet.svg
assets/vendor/heroicons/optimized/20/solid/wifi.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/wifi.svg
assets/vendor/heroicons/optimized/20/solid/window.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/window.svg
assets/vendor/heroicons/optimized/20/solid/wrench-screwdriver.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/wrench-screwdriver.svg
assets/vendor/heroicons/optimized/20/solid/wrench.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/wrench.svg
assets/vendor/heroicons/optimized/20/solid/x-circle.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/x-circle.svg
assets/vendor/heroicons/optimized/20/solid/x-mark.svg apps/sower/assets/vendor/heroicons/optimized/20/solid/x-mark.svg
assets/vendor/heroicons/optimized/24/outline/academic-cap.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/academic-cap.svg
assets/vendor/heroicons/optimized/24/outline/adjustments-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/adjustments-horizontal.svg
assets/vendor/heroicons/optimized/24/outline/adjustments-vertical.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/adjustments-vertical.svg
assets/vendor/heroicons/optimized/24/outline/archive-box-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/archive-box-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/archive-box-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/archive-box-x-mark.svg
assets/vendor/heroicons/optimized/24/outline/archive-box.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/archive-box.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-circle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square-stack.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-on-square.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down-tray.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down-tray.svg
assets/vendor/heroicons/optimized/24/outline/arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/arrow-left-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-left-circle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-left-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-left-on-rectangle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-long-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-long-down.svg
assets/vendor/heroicons/optimized/24/outline/arrow-long-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-long-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-long-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-long-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-long-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-long-up.svg
assets/vendor/heroicons/optimized/24/outline/arrow-path-rounded-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-path-rounded-square.svg
assets/vendor/heroicons/optimized/24/outline/arrow-path.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-path.svg
assets/vendor/heroicons/optimized/24/outline/arrow-right-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-right-circle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-right-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-right-on-rectangle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-small-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-small-down.svg
assets/vendor/heroicons/optimized/24/outline/arrow-small-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-small-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-small-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-small-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-small-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-small-up.svg
assets/vendor/heroicons/optimized/24/outline/arrow-top-right-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-top-right-on-square.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-circle.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square-stack.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-on-square.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up-tray.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up-tray.svg
assets/vendor/heroicons/optimized/24/outline/arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-up.svg
assets/vendor/heroicons/optimized/24/outline/arrow-uturn-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-down.svg
assets/vendor/heroicons/optimized/24/outline/arrow-uturn-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-left.svg
assets/vendor/heroicons/optimized/24/outline/arrow-uturn-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-right.svg
assets/vendor/heroicons/optimized/24/outline/arrow-uturn-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrow-uturn-up.svg
assets/vendor/heroicons/optimized/24/outline/arrows-pointing-in.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-in.svg
assets/vendor/heroicons/optimized/24/outline/arrows-pointing-out.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrows-pointing-out.svg
assets/vendor/heroicons/optimized/24/outline/arrows-right-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrows-right-left.svg
assets/vendor/heroicons/optimized/24/outline/arrows-up-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/arrows-up-down.svg
assets/vendor/heroicons/optimized/24/outline/at-symbol.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/at-symbol.svg
assets/vendor/heroicons/optimized/24/outline/backspace.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/backspace.svg
assets/vendor/heroicons/optimized/24/outline/backward.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/backward.svg
assets/vendor/heroicons/optimized/24/outline/banknotes.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/banknotes.svg
assets/vendor/heroicons/optimized/24/outline/bars-2.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-2.svg
assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-left.svg
assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-3-bottom-right.svg
assets/vendor/heroicons/optimized/24/outline/bars-3-center-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-3-center-left.svg
assets/vendor/heroicons/optimized/24/outline/bars-3.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-3.svg
assets/vendor/heroicons/optimized/24/outline/bars-4.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-4.svg
assets/vendor/heroicons/optimized/24/outline/bars-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/bars-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bars-arrow-up.svg
assets/vendor/heroicons/optimized/24/outline/battery-0.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/battery-0.svg
assets/vendor/heroicons/optimized/24/outline/battery-100.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/battery-100.svg
assets/vendor/heroicons/optimized/24/outline/battery-50.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/battery-50.svg
assets/vendor/heroicons/optimized/24/outline/beaker.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/beaker.svg
assets/vendor/heroicons/optimized/24/outline/bell-alert.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bell-alert.svg
assets/vendor/heroicons/optimized/24/outline/bell-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bell-slash.svg
assets/vendor/heroicons/optimized/24/outline/bell-snooze.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bell-snooze.svg
assets/vendor/heroicons/optimized/24/outline/bell.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bell.svg
assets/vendor/heroicons/optimized/24/outline/bolt-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bolt-slash.svg
assets/vendor/heroicons/optimized/24/outline/bolt.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bolt.svg
assets/vendor/heroicons/optimized/24/outline/book-open.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/book-open.svg
assets/vendor/heroicons/optimized/24/outline/bookmark-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bookmark-slash.svg
assets/vendor/heroicons/optimized/24/outline/bookmark-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bookmark-square.svg
assets/vendor/heroicons/optimized/24/outline/bookmark.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bookmark.svg
assets/vendor/heroicons/optimized/24/outline/briefcase.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/briefcase.svg
assets/vendor/heroicons/optimized/24/outline/bug-ant.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/bug-ant.svg
assets/vendor/heroicons/optimized/24/outline/building-library.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/building-library.svg
assets/vendor/heroicons/optimized/24/outline/building-office-2.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/building-office-2.svg
assets/vendor/heroicons/optimized/24/outline/building-office.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/building-office.svg
assets/vendor/heroicons/optimized/24/outline/building-storefront.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/building-storefront.svg
assets/vendor/heroicons/optimized/24/outline/cake.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cake.svg
assets/vendor/heroicons/optimized/24/outline/calculator.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/calculator.svg
assets/vendor/heroicons/optimized/24/outline/calendar-days.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/calendar-days.svg
assets/vendor/heroicons/optimized/24/outline/calendar.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/calendar.svg
assets/vendor/heroicons/optimized/24/outline/camera.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/camera.svg
assets/vendor/heroicons/optimized/24/outline/chart-bar-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chart-bar-square.svg
assets/vendor/heroicons/optimized/24/outline/chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chart-bar.svg
assets/vendor/heroicons/optimized/24/outline/chart-pie.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chart-pie.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center-text.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center-text.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-bottom-center.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-ellipsis.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left-right.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-left.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left-ellipsis.svg
assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chat-bubble-oval-left.svg
assets/vendor/heroicons/optimized/24/outline/check-badge.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/check-badge.svg
assets/vendor/heroicons/optimized/24/outline/check-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/check-circle.svg
assets/vendor/heroicons/optimized/24/outline/check.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/check.svg
assets/vendor/heroicons/optimized/24/outline/chevron-double-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-double-down.svg
assets/vendor/heroicons/optimized/24/outline/chevron-double-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-double-left.svg
assets/vendor/heroicons/optimized/24/outline/chevron-double-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-double-right.svg
assets/vendor/heroicons/optimized/24/outline/chevron-double-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-double-up.svg
assets/vendor/heroicons/optimized/24/outline/chevron-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-down.svg
assets/vendor/heroicons/optimized/24/outline/chevron-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-left.svg
assets/vendor/heroicons/optimized/24/outline/chevron-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-right.svg
assets/vendor/heroicons/optimized/24/outline/chevron-up-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-up-down.svg
assets/vendor/heroicons/optimized/24/outline/chevron-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/chevron-up.svg
assets/vendor/heroicons/optimized/24/outline/circle-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/circle-stack.svg
assets/vendor/heroicons/optimized/24/outline/clipboard-document-check.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/clipboard-document-check.svg
assets/vendor/heroicons/optimized/24/outline/clipboard-document-list.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/clipboard-document-list.svg
assets/vendor/heroicons/optimized/24/outline/clipboard-document.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/clipboard-document.svg
assets/vendor/heroicons/optimized/24/outline/clipboard.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/clipboard.svg
assets/vendor/heroicons/optimized/24/outline/clock.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/clock.svg
assets/vendor/heroicons/optimized/24/outline/cloud-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/cloud-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cloud-arrow-up.svg
assets/vendor/heroicons/optimized/24/outline/cloud.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cloud.svg
assets/vendor/heroicons/optimized/24/outline/code-bracket-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/code-bracket-square.svg
assets/vendor/heroicons/optimized/24/outline/code-bracket.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/code-bracket.svg
assets/vendor/heroicons/optimized/24/outline/cog-6-tooth.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cog-6-tooth.svg
assets/vendor/heroicons/optimized/24/outline/cog-8-tooth.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cog-8-tooth.svg
assets/vendor/heroicons/optimized/24/outline/cog.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cog.svg
assets/vendor/heroicons/optimized/24/outline/command-line.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/command-line.svg
assets/vendor/heroicons/optimized/24/outline/computer-desktop.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/computer-desktop.svg
assets/vendor/heroicons/optimized/24/outline/cpu-chip.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cpu-chip.svg
assets/vendor/heroicons/optimized/24/outline/credit-card.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/credit-card.svg
assets/vendor/heroicons/optimized/24/outline/cube-transparent.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cube-transparent.svg
assets/vendor/heroicons/optimized/24/outline/cube.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cube.svg
assets/vendor/heroicons/optimized/24/outline/currency-bangladeshi.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-bangladeshi.svg
assets/vendor/heroicons/optimized/24/outline/currency-dollar.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-dollar.svg
assets/vendor/heroicons/optimized/24/outline/currency-euro.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-euro.svg
assets/vendor/heroicons/optimized/24/outline/currency-pound.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-pound.svg
assets/vendor/heroicons/optimized/24/outline/currency-rupee.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-rupee.svg
assets/vendor/heroicons/optimized/24/outline/currency-yen.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/currency-yen.svg
assets/vendor/heroicons/optimized/24/outline/cursor-arrow-rays.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-rays.svg
assets/vendor/heroicons/optimized/24/outline/cursor-arrow-ripple.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/cursor-arrow-ripple.svg
assets/vendor/heroicons/optimized/24/outline/device-phone-mobile.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/device-phone-mobile.svg
assets/vendor/heroicons/optimized/24/outline/device-tablet.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/device-tablet.svg
assets/vendor/heroicons/optimized/24/outline/document-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/document-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-arrow-up.svg
assets/vendor/heroicons/optimized/24/outline/document-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-chart-bar.svg
assets/vendor/heroicons/optimized/24/outline/document-check.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-check.svg
assets/vendor/heroicons/optimized/24/outline/document-duplicate.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-duplicate.svg
assets/vendor/heroicons/optimized/24/outline/document-magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-magnifying-glass.svg
assets/vendor/heroicons/optimized/24/outline/document-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-minus.svg
assets/vendor/heroicons/optimized/24/outline/document-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-plus.svg
assets/vendor/heroicons/optimized/24/outline/document-text.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document-text.svg
assets/vendor/heroicons/optimized/24/outline/document.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/document.svg
assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal-circle.svg
assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/ellipsis-horizontal.svg
assets/vendor/heroicons/optimized/24/outline/ellipsis-vertical.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/ellipsis-vertical.svg
assets/vendor/heroicons/optimized/24/outline/envelope-open.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/envelope-open.svg
assets/vendor/heroicons/optimized/24/outline/envelope.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/envelope.svg
assets/vendor/heroicons/optimized/24/outline/exclamation-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/exclamation-circle.svg
assets/vendor/heroicons/optimized/24/outline/exclamation-triangle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/exclamation-triangle.svg
assets/vendor/heroicons/optimized/24/outline/eye-dropper.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/eye-dropper.svg
assets/vendor/heroicons/optimized/24/outline/eye-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/eye-slash.svg
assets/vendor/heroicons/optimized/24/outline/eye.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/eye.svg
assets/vendor/heroicons/optimized/24/outline/face-frown.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/face-frown.svg
assets/vendor/heroicons/optimized/24/outline/face-smile.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/face-smile.svg
assets/vendor/heroicons/optimized/24/outline/film.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/film.svg
assets/vendor/heroicons/optimized/24/outline/finger-print.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/finger-print.svg
assets/vendor/heroicons/optimized/24/outline/fire.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/fire.svg
assets/vendor/heroicons/optimized/24/outline/flag.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/flag.svg
assets/vendor/heroicons/optimized/24/outline/folder-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/folder-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/folder-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/folder-minus.svg
assets/vendor/heroicons/optimized/24/outline/folder-open.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/folder-open.svg
assets/vendor/heroicons/optimized/24/outline/folder-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/folder-plus.svg
assets/vendor/heroicons/optimized/24/outline/folder.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/folder.svg
assets/vendor/heroicons/optimized/24/outline/forward.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/forward.svg
assets/vendor/heroicons/optimized/24/outline/funnel.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/funnel.svg
assets/vendor/heroicons/optimized/24/outline/gif.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/gif.svg
assets/vendor/heroicons/optimized/24/outline/gift-top.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/gift-top.svg
assets/vendor/heroicons/optimized/24/outline/gift.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/gift.svg
assets/vendor/heroicons/optimized/24/outline/globe-alt.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/globe-alt.svg
assets/vendor/heroicons/optimized/24/outline/globe-americas.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/globe-americas.svg
assets/vendor/heroicons/optimized/24/outline/globe-asia-australia.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/globe-asia-australia.svg
assets/vendor/heroicons/optimized/24/outline/globe-europe-africa.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/globe-europe-africa.svg
assets/vendor/heroicons/optimized/24/outline/hand-raised.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/hand-raised.svg
assets/vendor/heroicons/optimized/24/outline/hand-thumb-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/hand-thumb-down.svg
assets/vendor/heroicons/optimized/24/outline/hand-thumb-up.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/hand-thumb-up.svg
assets/vendor/heroicons/optimized/24/outline/hashtag.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/hashtag.svg
assets/vendor/heroicons/optimized/24/outline/heart.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/heart.svg
assets/vendor/heroicons/optimized/24/outline/home-modern.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/home-modern.svg
assets/vendor/heroicons/optimized/24/outline/home.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/home.svg
assets/vendor/heroicons/optimized/24/outline/identification.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/identification.svg
assets/vendor/heroicons/optimized/24/outline/inbox-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/inbox-arrow-down.svg
assets/vendor/heroicons/optimized/24/outline/inbox-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/inbox-stack.svg
assets/vendor/heroicons/optimized/24/outline/inbox.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/inbox.svg
assets/vendor/heroicons/optimized/24/outline/information-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/information-circle.svg
assets/vendor/heroicons/optimized/24/outline/key.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/key.svg
assets/vendor/heroicons/optimized/24/outline/language.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/language.svg
assets/vendor/heroicons/optimized/24/outline/lifebuoy.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/lifebuoy.svg
assets/vendor/heroicons/optimized/24/outline/light-bulb.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/light-bulb.svg
assets/vendor/heroicons/optimized/24/outline/link.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/link.svg
assets/vendor/heroicons/optimized/24/outline/list-bullet.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/list-bullet.svg
assets/vendor/heroicons/optimized/24/outline/lock-closed.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/lock-closed.svg
assets/vendor/heroicons/optimized/24/outline/lock-open.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/lock-open.svg
assets/vendor/heroicons/optimized/24/outline/magnifying-glass-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-circle.svg
assets/vendor/heroicons/optimized/24/outline/magnifying-glass-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-minus.svg
assets/vendor/heroicons/optimized/24/outline/magnifying-glass-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/magnifying-glass-plus.svg
assets/vendor/heroicons/optimized/24/outline/magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/magnifying-glass.svg
assets/vendor/heroicons/optimized/24/outline/map-pin.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/map-pin.svg
assets/vendor/heroicons/optimized/24/outline/map.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/map.svg
assets/vendor/heroicons/optimized/24/outline/megaphone.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/megaphone.svg
assets/vendor/heroicons/optimized/24/outline/microphone.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/microphone.svg
assets/vendor/heroicons/optimized/24/outline/minus-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/minus-circle.svg
assets/vendor/heroicons/optimized/24/outline/minus-small.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/minus-small.svg
assets/vendor/heroicons/optimized/24/outline/minus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/minus.svg
assets/vendor/heroicons/optimized/24/outline/moon.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/moon.svg
assets/vendor/heroicons/optimized/24/outline/musical-note.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/musical-note.svg
assets/vendor/heroicons/optimized/24/outline/newspaper.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/newspaper.svg
assets/vendor/heroicons/optimized/24/outline/no-symbol.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/no-symbol.svg
assets/vendor/heroicons/optimized/24/outline/paint-brush.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/paint-brush.svg
assets/vendor/heroicons/optimized/24/outline/paper-airplane.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/paper-airplane.svg
assets/vendor/heroicons/optimized/24/outline/paper-clip.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/paper-clip.svg
assets/vendor/heroicons/optimized/24/outline/pause-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/pause-circle.svg
assets/vendor/heroicons/optimized/24/outline/pause.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/pause.svg
assets/vendor/heroicons/optimized/24/outline/pencil-square.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/pencil-square.svg
assets/vendor/heroicons/optimized/24/outline/pencil.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/pencil.svg
assets/vendor/heroicons/optimized/24/outline/phone-arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/phone-arrow-down-left.svg
assets/vendor/heroicons/optimized/24/outline/phone-arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/phone-arrow-up-right.svg
assets/vendor/heroicons/optimized/24/outline/phone-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/phone-x-mark.svg
assets/vendor/heroicons/optimized/24/outline/phone.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/phone.svg
assets/vendor/heroicons/optimized/24/outline/photo.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/photo.svg
assets/vendor/heroicons/optimized/24/outline/play-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/play-circle.svg
assets/vendor/heroicons/optimized/24/outline/play-pause.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/play-pause.svg
assets/vendor/heroicons/optimized/24/outline/play.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/play.svg
assets/vendor/heroicons/optimized/24/outline/plus-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/plus-circle.svg
assets/vendor/heroicons/optimized/24/outline/plus-small.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/plus-small.svg
assets/vendor/heroicons/optimized/24/outline/plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/plus.svg
assets/vendor/heroicons/optimized/24/outline/power.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/power.svg
assets/vendor/heroicons/optimized/24/outline/presentation-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/presentation-chart-bar.svg
assets/vendor/heroicons/optimized/24/outline/presentation-chart-line.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/presentation-chart-line.svg
assets/vendor/heroicons/optimized/24/outline/printer.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/printer.svg
assets/vendor/heroicons/optimized/24/outline/puzzle-piece.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/puzzle-piece.svg
assets/vendor/heroicons/optimized/24/outline/qr-code.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/qr-code.svg
assets/vendor/heroicons/optimized/24/outline/question-mark-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/question-mark-circle.svg
assets/vendor/heroicons/optimized/24/outline/queue-list.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/queue-list.svg
assets/vendor/heroicons/optimized/24/outline/radio.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/radio.svg
assets/vendor/heroicons/optimized/24/outline/receipt-percent.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/receipt-percent.svg
assets/vendor/heroicons/optimized/24/outline/receipt-refund.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/receipt-refund.svg
assets/vendor/heroicons/optimized/24/outline/rectangle-group.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/rectangle-group.svg
assets/vendor/heroicons/optimized/24/outline/rectangle-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/rectangle-stack.svg
assets/vendor/heroicons/optimized/24/outline/rocket-launch.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/rocket-launch.svg
assets/vendor/heroicons/optimized/24/outline/rss.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/rss.svg
assets/vendor/heroicons/optimized/24/outline/scale.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/scale.svg
assets/vendor/heroicons/optimized/24/outline/scissors.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/scissors.svg
assets/vendor/heroicons/optimized/24/outline/server-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/server-stack.svg
assets/vendor/heroicons/optimized/24/outline/server.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/server.svg
assets/vendor/heroicons/optimized/24/outline/share.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/share.svg
assets/vendor/heroicons/optimized/24/outline/shield-check.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/shield-check.svg
assets/vendor/heroicons/optimized/24/outline/shield-exclamation.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/shield-exclamation.svg
assets/vendor/heroicons/optimized/24/outline/shopping-bag.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/shopping-bag.svg
assets/vendor/heroicons/optimized/24/outline/shopping-cart.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/shopping-cart.svg
assets/vendor/heroicons/optimized/24/outline/signal-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/signal-slash.svg
assets/vendor/heroicons/optimized/24/outline/signal.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/signal.svg
assets/vendor/heroicons/optimized/24/outline/sparkles.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/sparkles.svg
assets/vendor/heroicons/optimized/24/outline/speaker-wave.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/speaker-wave.svg
assets/vendor/heroicons/optimized/24/outline/speaker-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/speaker-x-mark.svg
assets/vendor/heroicons/optimized/24/outline/square-2-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/square-2-stack.svg
assets/vendor/heroicons/optimized/24/outline/square-3-stack-3d.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/square-3-stack-3d.svg
assets/vendor/heroicons/optimized/24/outline/squares-2x2.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/squares-2x2.svg
assets/vendor/heroicons/optimized/24/outline/squares-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/squares-plus.svg
assets/vendor/heroicons/optimized/24/outline/star.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/star.svg
assets/vendor/heroicons/optimized/24/outline/stop-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/stop-circle.svg
assets/vendor/heroicons/optimized/24/outline/stop.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/stop.svg
assets/vendor/heroicons/optimized/24/outline/sun.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/sun.svg
assets/vendor/heroicons/optimized/24/outline/swatch.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/swatch.svg
assets/vendor/heroicons/optimized/24/outline/table-cells.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/table-cells.svg
assets/vendor/heroicons/optimized/24/outline/tag.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/tag.svg
assets/vendor/heroicons/optimized/24/outline/ticket.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/ticket.svg
assets/vendor/heroicons/optimized/24/outline/trash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/trash.svg
assets/vendor/heroicons/optimized/24/outline/trophy.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/trophy.svg
assets/vendor/heroicons/optimized/24/outline/truck.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/truck.svg
assets/vendor/heroicons/optimized/24/outline/tv.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/tv.svg
assets/vendor/heroicons/optimized/24/outline/user-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/user-circle.svg
assets/vendor/heroicons/optimized/24/outline/user-group.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/user-group.svg
assets/vendor/heroicons/optimized/24/outline/user-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/user-minus.svg
assets/vendor/heroicons/optimized/24/outline/user-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/user-plus.svg
assets/vendor/heroicons/optimized/24/outline/user.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/user.svg
assets/vendor/heroicons/optimized/24/outline/users.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/users.svg
assets/vendor/heroicons/optimized/24/outline/variable.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/variable.svg
assets/vendor/heroicons/optimized/24/outline/video-camera-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/video-camera-slash.svg
assets/vendor/heroicons/optimized/24/outline/video-camera.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/video-camera.svg
assets/vendor/heroicons/optimized/24/outline/view-columns.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/view-columns.svg
assets/vendor/heroicons/optimized/24/outline/viewfinder-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/viewfinder-circle.svg
assets/vendor/heroicons/optimized/24/outline/wallet.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/wallet.svg
assets/vendor/heroicons/optimized/24/outline/wifi.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/wifi.svg
assets/vendor/heroicons/optimized/24/outline/window.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/window.svg
assets/vendor/heroicons/optimized/24/outline/wrench-screwdriver.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/wrench-screwdriver.svg
assets/vendor/heroicons/optimized/24/outline/wrench.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/wrench.svg
assets/vendor/heroicons/optimized/24/outline/x-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/x-circle.svg
assets/vendor/heroicons/optimized/24/outline/x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/outline/x-mark.svg
assets/vendor/heroicons/optimized/24/solid/academic-cap.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/academic-cap.svg
assets/vendor/heroicons/optimized/24/solid/adjustments-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/adjustments-horizontal.svg
assets/vendor/heroicons/optimized/24/solid/adjustments-vertical.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/adjustments-vertical.svg
assets/vendor/heroicons/optimized/24/solid/archive-box-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/archive-box-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/archive-box-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/archive-box-x-mark.svg
assets/vendor/heroicons/optimized/24/solid/archive-box.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/archive-box.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-circle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square-stack.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-on-square.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down-tray.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down-tray.svg
assets/vendor/heroicons/optimized/24/solid/arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/arrow-left-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-left-circle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-left-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-left-on-rectangle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-long-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-long-down.svg
assets/vendor/heroicons/optimized/24/solid/arrow-long-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-long-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-long-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-long-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-long-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-long-up.svg
assets/vendor/heroicons/optimized/24/solid/arrow-path-rounded-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-path-rounded-square.svg
assets/vendor/heroicons/optimized/24/solid/arrow-path.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-path.svg
assets/vendor/heroicons/optimized/24/solid/arrow-right-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-right-circle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-right-on-rectangle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-right-on-rectangle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-small-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-small-down.svg
assets/vendor/heroicons/optimized/24/solid/arrow-small-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-small-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-small-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-small-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-small-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-small-up.svg
assets/vendor/heroicons/optimized/24/solid/arrow-top-right-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-top-right-on-square.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-circle.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square-stack.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-on-square.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up-tray.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up-tray.svg
assets/vendor/heroicons/optimized/24/solid/arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-up.svg
assets/vendor/heroicons/optimized/24/solid/arrow-uturn-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-down.svg
assets/vendor/heroicons/optimized/24/solid/arrow-uturn-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-left.svg
assets/vendor/heroicons/optimized/24/solid/arrow-uturn-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-right.svg
assets/vendor/heroicons/optimized/24/solid/arrow-uturn-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrow-uturn-up.svg
assets/vendor/heroicons/optimized/24/solid/arrows-pointing-in.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-in.svg
assets/vendor/heroicons/optimized/24/solid/arrows-pointing-out.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrows-pointing-out.svg
assets/vendor/heroicons/optimized/24/solid/arrows-right-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrows-right-left.svg
assets/vendor/heroicons/optimized/24/solid/arrows-up-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/arrows-up-down.svg
assets/vendor/heroicons/optimized/24/solid/at-symbol.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/at-symbol.svg
assets/vendor/heroicons/optimized/24/solid/backspace.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/backspace.svg
assets/vendor/heroicons/optimized/24/solid/backward.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/backward.svg
assets/vendor/heroicons/optimized/24/solid/banknotes.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/banknotes.svg
assets/vendor/heroicons/optimized/24/solid/bars-2.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-2.svg
assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-left.svg
assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-3-bottom-right.svg
assets/vendor/heroicons/optimized/24/solid/bars-3-center-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-3-center-left.svg
assets/vendor/heroicons/optimized/24/solid/bars-3.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-3.svg
assets/vendor/heroicons/optimized/24/solid/bars-4.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-4.svg
assets/vendor/heroicons/optimized/24/solid/bars-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/bars-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bars-arrow-up.svg
assets/vendor/heroicons/optimized/24/solid/battery-0.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/battery-0.svg
assets/vendor/heroicons/optimized/24/solid/battery-100.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/battery-100.svg
assets/vendor/heroicons/optimized/24/solid/battery-50.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/battery-50.svg
assets/vendor/heroicons/optimized/24/solid/beaker.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/beaker.svg
assets/vendor/heroicons/optimized/24/solid/bell-alert.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bell-alert.svg
assets/vendor/heroicons/optimized/24/solid/bell-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bell-slash.svg
assets/vendor/heroicons/optimized/24/solid/bell-snooze.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bell-snooze.svg
assets/vendor/heroicons/optimized/24/solid/bell.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bell.svg
assets/vendor/heroicons/optimized/24/solid/bolt-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bolt-slash.svg
assets/vendor/heroicons/optimized/24/solid/bolt.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bolt.svg
assets/vendor/heroicons/optimized/24/solid/book-open.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/book-open.svg
assets/vendor/heroicons/optimized/24/solid/bookmark-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bookmark-slash.svg
assets/vendor/heroicons/optimized/24/solid/bookmark-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bookmark-square.svg
assets/vendor/heroicons/optimized/24/solid/bookmark.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bookmark.svg
assets/vendor/heroicons/optimized/24/solid/briefcase.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/briefcase.svg
assets/vendor/heroicons/optimized/24/solid/bug-ant.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/bug-ant.svg
assets/vendor/heroicons/optimized/24/solid/building-library.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/building-library.svg
assets/vendor/heroicons/optimized/24/solid/building-office-2.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/building-office-2.svg
assets/vendor/heroicons/optimized/24/solid/building-office.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/building-office.svg
assets/vendor/heroicons/optimized/24/solid/building-storefront.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/building-storefront.svg
assets/vendor/heroicons/optimized/24/solid/cake.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cake.svg
assets/vendor/heroicons/optimized/24/solid/calculator.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/calculator.svg
assets/vendor/heroicons/optimized/24/solid/calendar-days.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/calendar-days.svg
assets/vendor/heroicons/optimized/24/solid/calendar.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/calendar.svg
assets/vendor/heroicons/optimized/24/solid/camera.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/camera.svg
assets/vendor/heroicons/optimized/24/solid/chart-bar-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chart-bar-square.svg
assets/vendor/heroicons/optimized/24/solid/chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chart-bar.svg
assets/vendor/heroicons/optimized/24/solid/chart-pie.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chart-pie.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center-text.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center-text.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-bottom-center.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-ellipsis.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left-right.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-left.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left-ellipsis.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left-ellipsis.svg
assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chat-bubble-oval-left.svg
assets/vendor/heroicons/optimized/24/solid/check-badge.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/check-badge.svg
assets/vendor/heroicons/optimized/24/solid/check-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/check-circle.svg
assets/vendor/heroicons/optimized/24/solid/check.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/check.svg
assets/vendor/heroicons/optimized/24/solid/chevron-double-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-double-down.svg
assets/vendor/heroicons/optimized/24/solid/chevron-double-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-double-left.svg
assets/vendor/heroicons/optimized/24/solid/chevron-double-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-double-right.svg
assets/vendor/heroicons/optimized/24/solid/chevron-double-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-double-up.svg
assets/vendor/heroicons/optimized/24/solid/chevron-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-down.svg
assets/vendor/heroicons/optimized/24/solid/chevron-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-left.svg
assets/vendor/heroicons/optimized/24/solid/chevron-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-right.svg
assets/vendor/heroicons/optimized/24/solid/chevron-up-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-up-down.svg
assets/vendor/heroicons/optimized/24/solid/chevron-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/chevron-up.svg
assets/vendor/heroicons/optimized/24/solid/circle-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/circle-stack.svg
assets/vendor/heroicons/optimized/24/solid/clipboard-document-check.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/clipboard-document-check.svg
assets/vendor/heroicons/optimized/24/solid/clipboard-document-list.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/clipboard-document-list.svg
assets/vendor/heroicons/optimized/24/solid/clipboard-document.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/clipboard-document.svg
assets/vendor/heroicons/optimized/24/solid/clipboard.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/clipboard.svg
assets/vendor/heroicons/optimized/24/solid/clock.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/clock.svg
assets/vendor/heroicons/optimized/24/solid/cloud-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/cloud-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cloud-arrow-up.svg
assets/vendor/heroicons/optimized/24/solid/cloud.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cloud.svg
assets/vendor/heroicons/optimized/24/solid/code-bracket-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/code-bracket-square.svg
assets/vendor/heroicons/optimized/24/solid/code-bracket.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/code-bracket.svg
assets/vendor/heroicons/optimized/24/solid/cog-6-tooth.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cog-6-tooth.svg
assets/vendor/heroicons/optimized/24/solid/cog-8-tooth.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cog-8-tooth.svg
assets/vendor/heroicons/optimized/24/solid/cog.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cog.svg
assets/vendor/heroicons/optimized/24/solid/command-line.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/command-line.svg
assets/vendor/heroicons/optimized/24/solid/computer-desktop.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/computer-desktop.svg
assets/vendor/heroicons/optimized/24/solid/cpu-chip.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cpu-chip.svg
assets/vendor/heroicons/optimized/24/solid/credit-card.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/credit-card.svg
assets/vendor/heroicons/optimized/24/solid/cube-transparent.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cube-transparent.svg
assets/vendor/heroicons/optimized/24/solid/cube.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cube.svg
assets/vendor/heroicons/optimized/24/solid/currency-bangladeshi.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-bangladeshi.svg
assets/vendor/heroicons/optimized/24/solid/currency-dollar.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-dollar.svg
assets/vendor/heroicons/optimized/24/solid/currency-euro.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-euro.svg
assets/vendor/heroicons/optimized/24/solid/currency-pound.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-pound.svg
assets/vendor/heroicons/optimized/24/solid/currency-rupee.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-rupee.svg
assets/vendor/heroicons/optimized/24/solid/currency-yen.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/currency-yen.svg
assets/vendor/heroicons/optimized/24/solid/cursor-arrow-rays.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-rays.svg
assets/vendor/heroicons/optimized/24/solid/cursor-arrow-ripple.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/cursor-arrow-ripple.svg
assets/vendor/heroicons/optimized/24/solid/device-phone-mobile.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/device-phone-mobile.svg
assets/vendor/heroicons/optimized/24/solid/device-tablet.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/device-tablet.svg
assets/vendor/heroicons/optimized/24/solid/document-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/document-arrow-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-arrow-up.svg
assets/vendor/heroicons/optimized/24/solid/document-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-chart-bar.svg
assets/vendor/heroicons/optimized/24/solid/document-check.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-check.svg
assets/vendor/heroicons/optimized/24/solid/document-duplicate.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-duplicate.svg
assets/vendor/heroicons/optimized/24/solid/document-magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-magnifying-glass.svg
assets/vendor/heroicons/optimized/24/solid/document-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-minus.svg
assets/vendor/heroicons/optimized/24/solid/document-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-plus.svg
assets/vendor/heroicons/optimized/24/solid/document-text.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document-text.svg
assets/vendor/heroicons/optimized/24/solid/document.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/document.svg
assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal-circle.svg
assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/ellipsis-horizontal.svg
assets/vendor/heroicons/optimized/24/solid/ellipsis-vertical.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/ellipsis-vertical.svg
assets/vendor/heroicons/optimized/24/solid/envelope-open.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/envelope-open.svg
assets/vendor/heroicons/optimized/24/solid/envelope.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/envelope.svg
assets/vendor/heroicons/optimized/24/solid/exclamation-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/exclamation-circle.svg
assets/vendor/heroicons/optimized/24/solid/exclamation-triangle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/exclamation-triangle.svg
assets/vendor/heroicons/optimized/24/solid/eye-dropper.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/eye-dropper.svg
assets/vendor/heroicons/optimized/24/solid/eye-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/eye-slash.svg
assets/vendor/heroicons/optimized/24/solid/eye.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/eye.svg
assets/vendor/heroicons/optimized/24/solid/face-frown.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/face-frown.svg
assets/vendor/heroicons/optimized/24/solid/face-smile.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/face-smile.svg
assets/vendor/heroicons/optimized/24/solid/film.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/film.svg
assets/vendor/heroicons/optimized/24/solid/finger-print.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/finger-print.svg
assets/vendor/heroicons/optimized/24/solid/fire.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/fire.svg
assets/vendor/heroicons/optimized/24/solid/flag.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/flag.svg
assets/vendor/heroicons/optimized/24/solid/folder-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/folder-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/folder-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/folder-minus.svg
assets/vendor/heroicons/optimized/24/solid/folder-open.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/folder-open.svg
assets/vendor/heroicons/optimized/24/solid/folder-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/folder-plus.svg
assets/vendor/heroicons/optimized/24/solid/folder.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/folder.svg
assets/vendor/heroicons/optimized/24/solid/forward.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/forward.svg
assets/vendor/heroicons/optimized/24/solid/funnel.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/funnel.svg
assets/vendor/heroicons/optimized/24/solid/gif.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/gif.svg
assets/vendor/heroicons/optimized/24/solid/gift-top.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/gift-top.svg
assets/vendor/heroicons/optimized/24/solid/gift.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/gift.svg
assets/vendor/heroicons/optimized/24/solid/globe-alt.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/globe-alt.svg
assets/vendor/heroicons/optimized/24/solid/globe-americas.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/globe-americas.svg
assets/vendor/heroicons/optimized/24/solid/globe-asia-australia.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/globe-asia-australia.svg
assets/vendor/heroicons/optimized/24/solid/globe-europe-africa.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/globe-europe-africa.svg
assets/vendor/heroicons/optimized/24/solid/hand-raised.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/hand-raised.svg
assets/vendor/heroicons/optimized/24/solid/hand-thumb-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/hand-thumb-down.svg
assets/vendor/heroicons/optimized/24/solid/hand-thumb-up.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/hand-thumb-up.svg
assets/vendor/heroicons/optimized/24/solid/hashtag.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/hashtag.svg
assets/vendor/heroicons/optimized/24/solid/heart.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/heart.svg
assets/vendor/heroicons/optimized/24/solid/home-modern.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/home-modern.svg
assets/vendor/heroicons/optimized/24/solid/home.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/home.svg
assets/vendor/heroicons/optimized/24/solid/identification.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/identification.svg
assets/vendor/heroicons/optimized/24/solid/inbox-arrow-down.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/inbox-arrow-down.svg
assets/vendor/heroicons/optimized/24/solid/inbox-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/inbox-stack.svg
assets/vendor/heroicons/optimized/24/solid/inbox.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/inbox.svg
assets/vendor/heroicons/optimized/24/solid/information-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/information-circle.svg
assets/vendor/heroicons/optimized/24/solid/key.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/key.svg
assets/vendor/heroicons/optimized/24/solid/language.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/language.svg
assets/vendor/heroicons/optimized/24/solid/lifebuoy.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/lifebuoy.svg
assets/vendor/heroicons/optimized/24/solid/light-bulb.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/light-bulb.svg
assets/vendor/heroicons/optimized/24/solid/link.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/link.svg
assets/vendor/heroicons/optimized/24/solid/list-bullet.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/list-bullet.svg
assets/vendor/heroicons/optimized/24/solid/lock-closed.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/lock-closed.svg
assets/vendor/heroicons/optimized/24/solid/lock-open.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/lock-open.svg
assets/vendor/heroicons/optimized/24/solid/magnifying-glass-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-circle.svg
assets/vendor/heroicons/optimized/24/solid/magnifying-glass-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-minus.svg
assets/vendor/heroicons/optimized/24/solid/magnifying-glass-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/magnifying-glass-plus.svg
assets/vendor/heroicons/optimized/24/solid/magnifying-glass.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/magnifying-glass.svg
assets/vendor/heroicons/optimized/24/solid/map-pin.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/map-pin.svg
assets/vendor/heroicons/optimized/24/solid/map.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/map.svg
assets/vendor/heroicons/optimized/24/solid/megaphone.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/megaphone.svg
assets/vendor/heroicons/optimized/24/solid/microphone.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/microphone.svg
assets/vendor/heroicons/optimized/24/solid/minus-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/minus-circle.svg
assets/vendor/heroicons/optimized/24/solid/minus-small.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/minus-small.svg
assets/vendor/heroicons/optimized/24/solid/minus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/minus.svg
assets/vendor/heroicons/optimized/24/solid/moon.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/moon.svg
assets/vendor/heroicons/optimized/24/solid/musical-note.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/musical-note.svg
assets/vendor/heroicons/optimized/24/solid/newspaper.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/newspaper.svg
assets/vendor/heroicons/optimized/24/solid/no-symbol.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/no-symbol.svg
assets/vendor/heroicons/optimized/24/solid/paint-brush.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/paint-brush.svg
assets/vendor/heroicons/optimized/24/solid/paper-airplane.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/paper-airplane.svg
assets/vendor/heroicons/optimized/24/solid/paper-clip.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/paper-clip.svg
assets/vendor/heroicons/optimized/24/solid/pause-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/pause-circle.svg
assets/vendor/heroicons/optimized/24/solid/pause.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/pause.svg
assets/vendor/heroicons/optimized/24/solid/pencil-square.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/pencil-square.svg
assets/vendor/heroicons/optimized/24/solid/pencil.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/pencil.svg
assets/vendor/heroicons/optimized/24/solid/phone-arrow-down-left.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/phone-arrow-down-left.svg
assets/vendor/heroicons/optimized/24/solid/phone-arrow-up-right.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/phone-arrow-up-right.svg
assets/vendor/heroicons/optimized/24/solid/phone-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/phone-x-mark.svg
assets/vendor/heroicons/optimized/24/solid/phone.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/phone.svg
assets/vendor/heroicons/optimized/24/solid/photo.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/photo.svg
assets/vendor/heroicons/optimized/24/solid/play-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/play-circle.svg
assets/vendor/heroicons/optimized/24/solid/play-pause.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/play-pause.svg
assets/vendor/heroicons/optimized/24/solid/play.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/play.svg
assets/vendor/heroicons/optimized/24/solid/plus-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/plus-circle.svg
assets/vendor/heroicons/optimized/24/solid/plus-small.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/plus-small.svg
assets/vendor/heroicons/optimized/24/solid/plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/plus.svg
assets/vendor/heroicons/optimized/24/solid/power.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/power.svg
assets/vendor/heroicons/optimized/24/solid/presentation-chart-bar.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/presentation-chart-bar.svg
assets/vendor/heroicons/optimized/24/solid/presentation-chart-line.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/presentation-chart-line.svg
assets/vendor/heroicons/optimized/24/solid/printer.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/printer.svg
assets/vendor/heroicons/optimized/24/solid/puzzle-piece.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/puzzle-piece.svg
assets/vendor/heroicons/optimized/24/solid/qr-code.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/qr-code.svg
assets/vendor/heroicons/optimized/24/solid/question-mark-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/question-mark-circle.svg
assets/vendor/heroicons/optimized/24/solid/queue-list.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/queue-list.svg
assets/vendor/heroicons/optimized/24/solid/radio.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/radio.svg
assets/vendor/heroicons/optimized/24/solid/receipt-percent.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/receipt-percent.svg
assets/vendor/heroicons/optimized/24/solid/receipt-refund.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/receipt-refund.svg
assets/vendor/heroicons/optimized/24/solid/rectangle-group.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/rectangle-group.svg
assets/vendor/heroicons/optimized/24/solid/rectangle-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/rectangle-stack.svg
assets/vendor/heroicons/optimized/24/solid/rocket-launch.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/rocket-launch.svg
assets/vendor/heroicons/optimized/24/solid/rss.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/rss.svg
assets/vendor/heroicons/optimized/24/solid/scale.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/scale.svg
assets/vendor/heroicons/optimized/24/solid/scissors.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/scissors.svg
assets/vendor/heroicons/optimized/24/solid/server-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/server-stack.svg
assets/vendor/heroicons/optimized/24/solid/server.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/server.svg
assets/vendor/heroicons/optimized/24/solid/share.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/share.svg
assets/vendor/heroicons/optimized/24/solid/shield-check.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/shield-check.svg
assets/vendor/heroicons/optimized/24/solid/shield-exclamation.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/shield-exclamation.svg
assets/vendor/heroicons/optimized/24/solid/shopping-bag.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/shopping-bag.svg
assets/vendor/heroicons/optimized/24/solid/shopping-cart.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/shopping-cart.svg
assets/vendor/heroicons/optimized/24/solid/signal-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/signal-slash.svg
assets/vendor/heroicons/optimized/24/solid/signal.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/signal.svg
assets/vendor/heroicons/optimized/24/solid/sparkles.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/sparkles.svg
assets/vendor/heroicons/optimized/24/solid/speaker-wave.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/speaker-wave.svg
assets/vendor/heroicons/optimized/24/solid/speaker-x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/speaker-x-mark.svg
assets/vendor/heroicons/optimized/24/solid/square-2-stack.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/square-2-stack.svg
assets/vendor/heroicons/optimized/24/solid/square-3-stack-3d.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/square-3-stack-3d.svg
assets/vendor/heroicons/optimized/24/solid/squares-2x2.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/squares-2x2.svg
assets/vendor/heroicons/optimized/24/solid/squares-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/squares-plus.svg
assets/vendor/heroicons/optimized/24/solid/star.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/star.svg
assets/vendor/heroicons/optimized/24/solid/stop-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/stop-circle.svg
assets/vendor/heroicons/optimized/24/solid/stop.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/stop.svg
assets/vendor/heroicons/optimized/24/solid/sun.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/sun.svg
assets/vendor/heroicons/optimized/24/solid/swatch.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/swatch.svg
assets/vendor/heroicons/optimized/24/solid/table-cells.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/table-cells.svg
assets/vendor/heroicons/optimized/24/solid/tag.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/tag.svg
assets/vendor/heroicons/optimized/24/solid/ticket.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/ticket.svg
assets/vendor/heroicons/optimized/24/solid/trash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/trash.svg
assets/vendor/heroicons/optimized/24/solid/trophy.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/trophy.svg
assets/vendor/heroicons/optimized/24/solid/truck.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/truck.svg
assets/vendor/heroicons/optimized/24/solid/tv.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/tv.svg
assets/vendor/heroicons/optimized/24/solid/user-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/user-circle.svg
assets/vendor/heroicons/optimized/24/solid/user-group.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/user-group.svg
assets/vendor/heroicons/optimized/24/solid/user-minus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/user-minus.svg
assets/vendor/heroicons/optimized/24/solid/user-plus.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/user-plus.svg
assets/vendor/heroicons/optimized/24/solid/user.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/user.svg
assets/vendor/heroicons/optimized/24/solid/users.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/users.svg
assets/vendor/heroicons/optimized/24/solid/variable.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/variable.svg
assets/vendor/heroicons/optimized/24/solid/video-camera-slash.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/video-camera-slash.svg
assets/vendor/heroicons/optimized/24/solid/video-camera.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/video-camera.svg
assets/vendor/heroicons/optimized/24/solid/view-columns.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/view-columns.svg
assets/vendor/heroicons/optimized/24/solid/viewfinder-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/viewfinder-circle.svg
assets/vendor/heroicons/optimized/24/solid/wallet.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/wallet.svg
assets/vendor/heroicons/optimized/24/solid/wifi.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/wifi.svg
assets/vendor/heroicons/optimized/24/solid/window.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/window.svg
assets/vendor/heroicons/optimized/24/solid/wrench-screwdriver.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/wrench-screwdriver.svg
assets/vendor/heroicons/optimized/24/solid/wrench.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/wrench.svg
assets/vendor/heroicons/optimized/24/solid/x-circle.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/x-circle.svg
assets/vendor/heroicons/optimized/24/solid/x-mark.svg apps/sower/assets/vendor/heroicons/optimized/24/solid/x-mark.svg
assets/vendor/topbar.js apps/sower/assets/vendor/topbar.js
+1 -2
client-elixir/.formatter.exs apps/sower_client/.formatter.exs
··· 1 1 # Used by "mix format" 2 2 [ 3 - inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"], 4 - import_deps: [:typedstruct] 3 + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] 5 4 ]
client-elixir/.gitignore apps/sower_client/.gitignore
client-elixir/README.md apps/sower_client/README.md
-13
client-elixir/justfile
··· 1 - mix-clean: 2 - mix deps.clean --unused --unlock 3 - 4 - mix-nix-lock: 5 - mix deps.nix 6 - 7 - update-elixir: mix-clean 8 - mix deps.update --all 9 - mix deps.get 10 - mix hex.outdated 11 - just mix-nix-lock 12 - git add mix.exs mix.lock deps.nix 13 - git commit -m 'agent(chore): update elixir deps' -- mix.exs mix.lock deps.nix
client-elixir/lib/sower_client.ex apps/sower_client/lib/sower_client.ex
+8 -2
client-elixir/mix.exs apps/sower_client/mix.exs
··· 4 4 def project do 5 5 [ 6 6 app: :sower_client, 7 - version: "0.1.0", 7 + build_path: "../../_build", 8 + config_path: "../../config/config.exs", 9 + deps: deps(), 10 + deps_path: "../../deps", 8 11 elixir: "~> 1.18", 12 + lockfile: "../../mix.lock", 9 13 start_permanent: Mix.env() == :prod, 10 - deps: deps() 14 + version: SowerUmbrella.MixProject.project()[:version] 11 15 ] 12 16 end 13 17 18 + # Run "mix help compile.app" to learn about applications. 14 19 def application do 15 20 [ 16 21 extra_applications: [:logger] 17 22 ] 18 23 end 19 24 25 + # Run "mix help deps" to learn about dependencies. 20 26 defp deps do 21 27 [ 22 28 {:igniter, "~> 0.6", only: [:dev, :test]},
-24
client-elixir/mix.lock
··· 1 - %{ 2 - "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, 3 - "deps_nix": {:hex, :deps_nix, "2.2.0", "648321171b7152ba1a980b5767af553bfa52a86dcfa1f72efa576f18b363b374", [:mix], [{:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "cc302e2b3edc51dc658b32552f3bbef276f722f78936ac923b38fa60f899f645"}, 4 - "ecto": {:hex, :ecto, "3.12.6", "8bf762dc5b87d85b7aca7ad5fe31ef8142a84cea473a3381eb933bd925751300", [: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", "4c0cba01795463eebbcd9e4b5ef53c1ee8e68b9c482baef2a80de5a61e7a57fe"}, 5 - "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"}, 6 - "glob_ex": {:hex, :glob_ex, "0.1.11", "cb50d3f1ef53f6ca04d6252c7fde09fd7a1cf63387714fe96f340a1349e62c93", [:mix], [], "hexpm", "342729363056e3145e61766b416769984c329e4378f1d558b63e341020525de4"}, 7 - "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, 8 - "igniter": {:hex, :igniter, "0.6.7", "4e183afc59d89289e223c4282fd3e9bb39b82e28d0aa6d3369f70fbd3e21a243", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:phx_new, "~> 1.7", [hex: :phx_new, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:rewrite, ">= 1.1.1 and < 2.0.0-0", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}], "hexpm", "43b0a584dc84fd1320772c87047355b604ed2bcdd25392b17f7da8bdd09b61ac"}, 9 - "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, 10 - "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, 11 - "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [: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", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, 12 - "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, 13 - "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, 14 - "owl": {:hex, :owl, "0.12.2", "65906b525e5c3ef51bab6cba7687152be017aebe1da077bb719a5ee9f7e60762", [:mix], [{:ucwidth, "~> 0.2", [hex: :ucwidth, repo: "hexpm", optional: true]}], "hexpm", "6398efa9e1fea70a04d24231e10dcd66c1ac1aa2da418d20ef5357ec61de2880"}, 15 - "req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"}, 16 - "rewrite": {:hex, :rewrite, "1.1.2", "f5a5d10f5fed1491a6ff48e078d4585882695962ccc9e6c779bae025d1f92eda", [:mix], [{:glob_ex, "~> 0.1", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}, {:text_diff, "~> 0.1", [hex: :text_diff, repo: "hexpm", optional: false]}], "hexpm", "7f8b94b1e3528d0a47b3e8b7bfeca559d2948a65fa7418a9ad7d7712703d39d4"}, 17 - "sourceror": {:hex, :sourceror, "1.10.0", "38397dedbbc286966ec48c7af13e228b171332be1ad731974438c77791945ce9", [:mix], [], "hexpm", "29dbdfc92e04569c9d8e6efdc422fc1d815f4bd0055dc7c51b8800fb75c4b3f1"}, 18 - "spitfire": {:hex, :spitfire, "0.2.1", "29e154873f05444669c7453d3d931820822cbca5170e88f0f8faa1de74a79b47", [:mix], [], "hexpm", "6eeed75054a38341b2e1814d41bb0a250564092358de2669fdb57ff88141d91b"}, 19 - "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, 20 - "text_diff": {:hex, :text_diff, "0.1.0", "1caf3175e11a53a9a139bc9339bd607c47b9e376b073d4571c031913317fecaa", [:mix], [], "hexpm", "d1ffaaecab338e49357b6daa82e435f877e0649041ace7755583a0ea3362dbd7"}, 21 - "typed_struct_ctor": {:hex, :typed_struct_ctor, "0.1.2", "00cc745439e99047615bb0700b43652311c199043293c13335151873505c5d01", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:typed_struct_ecto_changeset, "~> 1.0.0", [hex: :typed_struct_ecto_changeset, repo: "hexpm", optional: false]}, {:typedstruct, "~> 0.5.2", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "79695303f7402f1a5b92e5914446014020b234bbfa1fccc664bacdf47101567f"}, 22 - "typed_struct_ecto_changeset": {:hex, :typed_struct_ecto_changeset, "1.1.0", "dd1924c786798284e7e8f2844ea6638a293cdcf13573ad758c5b2cb36bf51288", [:mix], [], "hexpm", "10f56689b7ca7c5e96aceb49b08a30712a36b35f987ebc4d20be47177d53fa73"}, 23 - "typedstruct": {:hex, :typedstruct, "0.5.3", "d68ae424251a41b81a8d0c485328ab48edbd3858f3565bbdac21b43c056fc9b4", [:make, :mix], [], "hexpm", "b53b8186701417c0b2782bf02a2db5524f879b8488f91d1d83b97d84c2943432"}, 24 - }
client-elixir/test/sower_client_test.exs apps/sower_client/test/sower_client_test.exs
client-elixir/test/test_helper.exs apps/sower_client/test/test_helper.exs
+4 -4
config/config.exs
··· 23 23 # Configure esbuild (the version is required) 24 24 config :esbuild, 25 25 version: "0.17.11", 26 - default: [ 26 + sower: [ 27 27 args: 28 28 ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*), 29 - cd: Path.expand("../assets", __DIR__), 29 + cd: Path.expand("../apps/sower/assets", __DIR__), 30 30 env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)} 31 31 ] 32 32 33 33 # Configure tailwind (the version is required) 34 34 config :tailwind, 35 35 version: "3.3.2", 36 - default: [ 36 + sower: [ 37 37 args: ~w( 38 38 --config=tailwind.config.js 39 39 --input=css/app.css 40 40 --output=../priv/static/assets/app.css 41 41 ), 42 - cd: Path.expand("../assets", __DIR__) 42 + cd: Path.expand("../apps/sower/assets", __DIR__) 43 43 ] 44 44 45 45 # Configures Elixir's Logger
+9
config/dev.exs
··· 73 73 config :phoenix, :plug_init_mode, :runtime 74 74 75 75 config :libcluster, topologies: [sower: [strategy: Cluster.Strategy.LocalEpmd]] 76 + 77 + config :sower_agent, SowerAgent.SocketClient, 78 + uri: "ws://localhost:7150/agent/websocket", 79 + reconnect_after_msec: [200, 500, 1_000, 2_000] 80 + 81 + config :sower_agent, SowerAgent.Storage, file: "./data/storage.etf" 82 + 83 + config :exsync, 84 + reload_callback: {SowerAgent.SocketClient, :restart, []}
+2
config/runtime.exs
··· 362 362 if config_env() != :test do 363 363 Sower.Config.load() 364 364 end 365 + 366 + config :sower_agent, :config, SowerAgent.Config.load()
+4
config/test.exs
··· 28 28 29 29 config :sower, :database, 30 30 encryption_key: "UIFQeYN5EBgkXgK502I8mosh3vbEj3AE1rRwWJDysBk=" |> Base.decode64!() 31 + 32 + config :sower_agent, SocketClient, 33 + uri: "ws://example.org/socket/websocket", 34 + reconnect_after_msec: [200, 500, 1_000, 2_000]
-1
justfile
··· 36 36 37 37 mix-nix-lock: 38 38 mix deps.nix --output nix/packages/deps.nix 39 - cd agent; mix deps.nix 40 39 41 40 mix-clean: 42 41 mix deps.clean --unused --unlock
lib/forgejo/client.ex apps/sower/lib/forgejo/client.ex
lib/forgejo/repository.ex apps/sower/lib/forgejo/repository.ex
lib/forgejo/user.ex apps/sower/lib/forgejo/user.ex
lib/sower.ex apps/sower/lib/sower.ex
lib/sower/accounts.ex apps/sower/lib/sower/accounts.ex
lib/sower/accounts/access_token.ex apps/sower/lib/sower/accounts/access_token.ex
lib/sower/accounts/organization.ex apps/sower/lib/sower/accounts/organization.ex
lib/sower/accounts/user.ex apps/sower/lib/sower/accounts/user.ex
lib/sower/accounts/user_token.ex apps/sower/lib/sower/accounts/user_token.ex
lib/sower/application.ex apps/sower/lib/sower/application.ex
lib/sower/authorization.ex apps/sower/lib/sower/authorization.ex
lib/sower/authorization/actions.ex apps/sower/lib/sower/authorization/actions.ex
lib/sower/authorization/permissions.ex apps/sower/lib/sower/authorization/permissions.ex
lib/sower/client.ex apps/sower/lib/sower/client.ex
lib/sower/distribution.ex apps/sower/lib/sower/distribution.ex
lib/sower/distribution/deployment.ex apps/sower/lib/sower/distribution/deployment.ex
lib/sower/distribution/seed_deployment.ex apps/sower/lib/sower/distribution/seed_deployment.ex
lib/sower/distribution/store_path_deployment.ex apps/sower/lib/sower/distribution/store_path_deployment.ex
lib/sower/forge.ex apps/sower/lib/sower/forge.ex
lib/sower/forge/client_api.ex apps/sower/lib/sower/forge/client_api.ex
lib/sower/forge/connection.ex apps/sower/lib/sower/forge/connection.ex
lib/sower/forge/oauth.ex apps/sower/lib/sower/forge/oauth.ex
lib/sower/forge/repository.ex apps/sower/lib/sower/forge/repository.ex
lib/sower/forge/webhook_storage.ex apps/sower/lib/sower/forge/webhook_storage.ex
lib/sower/nix.ex apps/sower/lib/sower/nix.ex
lib/sower/nix/cache.ex apps/sower/lib/sower/nix/cache.ex
lib/sower/nix/store_path.ex apps/sower/lib/sower/nix/store_path.ex
lib/sower/orchestration.ex apps/sower/lib/sower/orchestration.ex
lib/sower/orchestration/agent.ex apps/sower/lib/sower/orchestration/agent.ex
lib/sower/release.ex apps/sower/lib/sower/release.ex
lib/sower/repo.ex apps/sower/lib/sower/repo.ex
lib/sower/repo/seeds/org.ex apps/sower/lib/sower/repo/seeds/org.ex
lib/sower/repo/seeds/preseed.ex apps/sower/lib/sower/repo/seeds/preseed.ex
lib/sower/schema.ex apps/sower/lib/sower/schema.ex
lib/sower/seed.ex apps/sower/lib/sower/seed.ex
lib/sower/seed_store_path.ex apps/sower/lib/sower/seed_store_path.ex
lib/sower/vault.ex apps/sower/lib/sower/vault.ex
lib/sower/vault/binary.ex apps/sower/lib/sower/vault/binary.ex
lib/sower_web.ex apps/sower/lib/sower_web.ex
lib/sower_web/agent_channel.ex apps/sower/lib/sower_web/agent_channel.ex
lib/sower_web/agent_socket.ex apps/sower/lib/sower_web/agent_socket.ex
lib/sower_web/api_spec.ex apps/sower/lib/sower_web/api_spec.ex
lib/sower_web/components/core_components.ex apps/sower/lib/sower_web/components/core_components.ex
lib/sower_web/components/layouts.ex apps/sower/lib/sower_web/components/layouts.ex
lib/sower_web/components/layouts/app.html.heex apps/sower/lib/sower_web/components/layouts/app.html.heex
lib/sower_web/components/layouts/root.html.heex apps/sower/lib/sower_web/components/layouts/root.html.heex
lib/sower_web/components/sower_components.ex apps/sower/lib/sower_web/components/sower_components.ex
lib/sower_web/controllers/api/changeset_json.ex apps/sower/lib/sower_web/controllers/api/changeset_json.ex
lib/sower_web/controllers/api/error_json.ex apps/sower/lib/sower_web/controllers/api/error_json.ex
lib/sower_web/controllers/api/fallback_controller.ex apps/sower/lib/sower_web/controllers/api/fallback_controller.ex
lib/sower_web/controllers/api/nix/cache_controller.ex apps/sower/lib/sower_web/controllers/api/nix/cache_controller.ex
lib/sower_web/controllers/api/nix/cache_json.ex apps/sower/lib/sower_web/controllers/api/nix/cache_json.ex
lib/sower_web/controllers/api/seed_controller.ex apps/sower/lib/sower_web/controllers/api/seed_controller.ex
lib/sower_web/controllers/api/seed_json.ex apps/sower/lib/sower_web/controllers/api/seed_json.ex
lib/sower_web/controllers/auth_controller.ex apps/sower/lib/sower_web/controllers/auth_controller.ex
lib/sower_web/controllers/auth_html.ex apps/sower/lib/sower_web/controllers/auth_html.ex
lib/sower_web/controllers/auth_html/failure.html.heex apps/sower/lib/sower_web/controllers/auth_html/failure.html.heex
lib/sower_web/controllers/bootstrap_controller.ex apps/sower/lib/sower_web/controllers/bootstrap_controller.ex
lib/sower_web/controllers/bootstrap_fallback_controller.ex apps/sower/lib/sower_web/controllers/bootstrap_fallback_controller.ex
lib/sower_web/controllers/error_html.ex apps/sower/lib/sower_web/controllers/error_html.ex
lib/sower_web/controllers/forge/oauth_controller.ex apps/sower/lib/sower_web/controllers/forge/oauth_controller.ex
lib/sower_web/controllers/forge/webhook_controller.ex apps/sower/lib/sower_web/controllers/forge/webhook_controller.ex
lib/sower_web/controllers/page_controller.ex apps/sower/lib/sower_web/controllers/page_controller.ex
lib/sower_web/controllers/page_html.ex apps/sower/lib/sower_web/controllers/page_html.ex
lib/sower_web/controllers/page_html/home.html.heex apps/sower/lib/sower_web/controllers/page_html/home.html.heex
lib/sower_web/endpoint.ex apps/sower/lib/sower_web/endpoint.ex
lib/sower_web/gettext.ex apps/sower/lib/sower_web/gettext.ex
lib/sower_web/healthcheck.ex apps/sower/lib/sower_web/healthcheck.ex
lib/sower_web/live/agent_live/form_component.ex apps/sower/lib/sower_web/live/agent_live/form_component.ex
lib/sower_web/live/agent_live/index.ex apps/sower/lib/sower_web/live/agent_live/index.ex
lib/sower_web/live/agent_live/index.html.heex apps/sower/lib/sower_web/live/agent_live/index.html.heex
lib/sower_web/live/agent_live/show.ex apps/sower/lib/sower_web/live/agent_live/show.ex
lib/sower_web/live/agent_live/show.html.heex apps/sower/lib/sower_web/live/agent_live/show.html.heex
lib/sower_web/live/client_live/form_component.ex apps/sower/lib/sower_web/live/client_live/form_component.ex
lib/sower_web/live/client_live/index.ex apps/sower/lib/sower_web/live/client_live/index.ex
lib/sower_web/live/client_live/index.html.heex apps/sower/lib/sower_web/live/client_live/index.html.heex
lib/sower_web/live/client_live/show.ex apps/sower/lib/sower_web/live/client_live/show.ex
lib/sower_web/live/client_live/show.html.heex apps/sower/lib/sower_web/live/client_live/show.html.heex
lib/sower_web/live/forge/connection_live/form_component.ex apps/sower/lib/sower_web/live/forge/connection_live/form_component.ex
lib/sower_web/live/forge/connection_live/index.ex apps/sower/lib/sower_web/live/forge/connection_live/index.ex
lib/sower_web/live/forge/connection_live/index.html.heex apps/sower/lib/sower_web/live/forge/connection_live/index.html.heex
lib/sower_web/live/forge/connection_live/show.ex apps/sower/lib/sower_web/live/forge/connection_live/show.ex
lib/sower_web/live/forge/connection_live/show.html.heex apps/sower/lib/sower_web/live/forge/connection_live/show.html.heex
lib/sower_web/live/nix/cache_live/form_component.ex apps/sower/lib/sower_web/live/nix/cache_live/form_component.ex
lib/sower_web/live/nix/cache_live/index.ex apps/sower/lib/sower_web/live/nix/cache_live/index.ex
lib/sower_web/live/nix/cache_live/index.html.heex apps/sower/lib/sower_web/live/nix/cache_live/index.html.heex
lib/sower_web/live/nix/cache_live/show.ex apps/sower/lib/sower_web/live/nix/cache_live/show.ex
lib/sower_web/live/nix/cache_live/show.html.heex apps/sower/lib/sower_web/live/nix/cache_live/show.html.heex
lib/sower_web/live/nix/store_path_live/index.ex apps/sower/lib/sower_web/live/nix/store_path_live/index.ex
lib/sower_web/live/nix/store_path_live/index.html.heex apps/sower/lib/sower_web/live/nix/store_path_live/index.html.heex
lib/sower_web/live/nix/store_path_live/show.ex apps/sower/lib/sower_web/live/nix/store_path_live/show.ex
lib/sower_web/live/nix/store_path_live/show.html.heex apps/sower/lib/sower_web/live/nix/store_path_live/show.html.heex
lib/sower_web/live/seed_live/index.ex apps/sower/lib/sower_web/live/seed_live/index.ex
lib/sower_web/live/seed_live/index.html.heex apps/sower/lib/sower_web/live/seed_live/index.html.heex
lib/sower_web/live/seed_live/show.ex apps/sower/lib/sower_web/live/seed_live/show.ex
lib/sower_web/live/seed_live/show.html.heex apps/sower/lib/sower_web/live/seed_live/show.html.heex
lib/sower_web/live/settings/access_token_live/form_component.ex apps/sower/lib/sower_web/live/settings/access_token_live/form_component.ex
lib/sower_web/live/settings/access_token_live/index.ex apps/sower/lib/sower_web/live/settings/access_token_live/index.ex
lib/sower_web/live/settings/access_token_live/index.html.heex apps/sower/lib/sower_web/live/settings/access_token_live/index.html.heex
lib/sower_web/live/settings/access_token_live/show.ex apps/sower/lib/sower_web/live/settings/access_token_live/show.ex
lib/sower_web/live/settings/access_token_live/show.html.heex apps/sower/lib/sower_web/live/settings/access_token_live/show.html.heex
lib/sower_web/live/settings/index_live.ex apps/sower/lib/sower_web/live/settings/index_live.ex
lib/sower_web/plugs/parsers.ex apps/sower/lib/sower_web/plugs/parsers.ex
lib/sower_web/plugs/webhook.ex apps/sower/lib/sower_web/plugs/webhook.ex
lib/sower_web/presence.ex apps/sower/lib/sower_web/presence.ex
lib/sower_web/router.ex apps/sower/lib/sower_web/router.ex
lib/sower_web/schemas/nix/cache.ex apps/sower/lib/sower_web/schemas/nix/cache.ex
lib/sower_web/schemas/seed.ex apps/sower/lib/sower_web/schemas/seed.ex
lib/sower_web/schemas/store_path.ex apps/sower/lib/sower_web/schemas/store_path.ex
lib/sower_web/telemetry.ex apps/sower/lib/sower_web/telemetry.ex
lib/sower_web/token_auth.ex apps/sower/lib/sower_web/token_auth.ex
lib/sower_web/ueberauth.ex apps/sower/lib/sower_web/ueberauth.ex
lib/sower_web/user_auth.ex apps/sower/lib/sower_web/user_auth.ex
+23 -67
mix.exs
··· 1 - defmodule Sower.MixProject do 1 + defmodule SowerUmbrella.MixProject do 2 2 use Mix.Project 3 3 4 4 def project do 5 + version = String.trim(File.read!(Path.join(Path.dirname(__ENV__.file), "VERSION"))) 6 + 5 7 [ 6 - aliases: aliases(), 7 - app: :sower, 8 + apps_path: "apps", 8 9 deps: deps(), 9 - elixir: "~> 1.14", 10 - elixirc_paths: elixirc_paths(Mix.env()), 10 + releases: [ 11 + agent: [ 12 + version: version, 13 + applications: [sower_agent: :permanent], 14 + runtime_config_path: "config/runtime_agent.exs" 15 + ], 16 + server: [ 17 + version: version, 18 + applications: [sower: :permanent], 19 + runtime_config_path: "config/runtime.exs" 20 + ] 21 + ], 11 22 start_permanent: Mix.env() == :prod, 12 - version: String.trim(File.read!("VERSION")) 23 + version: version 13 24 ] 14 25 end 15 26 27 + # Dependencies listed here are available only for this 28 + # project and cannot be accessed from applications inside 29 + # the apps folder. 30 + # 31 + # Run "mix help deps" for examples and options. 16 32 defp deps do 17 33 [ 18 - {:argon2, "~> 1.2"}, 19 - {:bandit, "~> 1.0"}, 20 - {:cloak_ecto, "~> 1.3.0"}, 21 - {:cuid2_ex, "~> 0.2.0"}, 22 34 {:deps_nix, "~> 2.0", only: [:dev]}, 23 - {:ecto_sql, "~> 3.11"}, 24 - {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, 25 - {:ex_json_schema, "~> 0.11.1"}, 26 - {:faker, "~> 0.18", only: :test}, 27 - {:finch, "~> 0.13"}, 28 - {:floki, ">= 0.30.0", only: :test}, 29 - {:gettext, "~> 0.20"}, 30 - {:jason, "~> 1.2"}, 31 - {:joken, "~> 2.6.1"}, 32 - {:libcluster_consul, "~> 1.3"}, 33 - {:mime, "~> 2.0.6"}, 34 - {:mix_test_watch, "~> 1.0", only: [:dev, :test], runtime: false}, 35 - {:open_api_spex, "~> 3.20"}, 36 - {:permit, "~> 0.3.0"}, 37 - {:permit_ecto, "~> 0.2.3"}, 38 - {:phoenix, "~> 1.7.7"}, 39 - {:phoenix_ecto, "~> 4.4"}, 40 - {:phoenix_html, "~> 4.1"}, 41 - {:phoenix_live_dashboard, "~> 0.8.0"}, 42 - {:phoenix_live_reload, "~> 1.2", only: :dev}, 43 - {:phoenix_live_view, "~> 1.0.0"}, 44 - {:postgrex, ">= 0.0.0"}, 45 - {:req, ">= 0.5.8"}, 46 - {:shortuuid, "~> 4.0"}, 47 - # load typedstruct before typed_struct_ecto_changeset 48 - {:typedstruct, "~> 0.5"}, 49 - {:sower_client, path: "./client-elixir"}, 50 - {:systemd, "~> 0.6"}, 51 - {:tailwind, "~> 0.3.0", runtime: Mix.env() == :dev}, 52 - {:telemetry_metrics, "~> 1.1.0"}, 53 - {:telemetry_poller, "~> 1.1"}, 54 - {:ueberauth, "~> 0.10"}, 55 - {:ueberauth_oidcc, "~> 0.3"}, 56 - {:uuidv7, "~> 1.0.0"} 35 + {:igniter, "~> 0.6", only: [:dev, :test]} 57 36 ] 58 37 end 59 - 60 - defp aliases do 61 - [ 62 - setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"], 63 - "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], 64 - "ecto.reset": ["ecto.drop", "ecto.setup"], 65 - test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"], 66 - "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"], 67 - "assets.build": ["tailwind default", "esbuild default"], 68 - "assets.deploy": ["tailwind default --minify", "esbuild default --minify", "phx.digest"] 69 - ] 70 - end 71 - 72 - def application do 73 - [ 74 - mod: {Sower.Application, []}, 75 - extra_applications: [:logger, :runtime_tools] 76 - ] 77 - end 78 - 79 - # Specifies which paths to compile per environment. 80 - defp elixirc_paths(:test), do: ["lib", "test/support"] 81 - defp elixirc_paths(_), do: ["lib"] 82 38 end
+10
mix.lock
··· 14 14 "esbuild": {:hex, :esbuild, "0.10.0", "b0aa3388a1c23e727c5a3e7427c932d89ee791746b0081bbe56103e9ef3d291f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "468489cda427b974a7cc9f03ace55368a83e1a7be12fba7e30969af78e5f8c70"}, 15 15 "ex_json_schema": {:hex, :ex_json_schema, "0.11.1", "b593f92937a095f66054bb318681397dfe7304e7d2b6b1a7534ea3aa40024f8c", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "32d651a575a6ce2fd613f140b0fef8dd0acc7cf8e8bcd29a3a1be5c945700dd5"}, 16 16 "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"}, 17 + "exsync": {:hex, :exsync, "0.4.1", "0a14fe4bfcb80a509d8a0856be3dd070fffe619b9ba90fec13c58b316c176594", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "cefb22aa805ec97ffc5b75a4e1dc54bcaf781e8b32564bf74abbe5803d1b5178"}, 17 18 "faker": {:hex, :faker, "0.18.0", "943e479319a22ea4e8e39e8e076b81c02827d9302f3d32726c5bf82f430e6e14", [:mix], [], "hexpm", "bfbdd83958d78e2788e99ec9317c4816e651ad05e24cfd1196ce5db5b3e81797"}, 18 19 "file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"}, 19 20 "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"}, 20 21 "floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"}, 21 22 "gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"}, 23 + "glob_ex": {:hex, :glob_ex, "0.1.11", "cb50d3f1ef53f6ca04d6252c7fde09fd7a1cf63387714fe96f340a1349e62c93", [:mix], [], "hexpm", "342729363056e3145e61766b416769984c329e4378f1d558b63e341020525de4"}, 22 24 "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, 25 + "igniter": {:hex, :igniter, "0.6.8", "f058e7e5e3e69af9c795cc3022a92f802c8e2e1fd366579f6b60af328f69e2bb", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:phx_new, "~> 1.7", [hex: :phx_new, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:rewrite, ">= 1.1.1 and < 2.0.0-0", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}], "hexpm", "b0d9cf65a64ec984417c2eec1fcbbb059faba6eb64fcce3abdae00e0f6d36a33"}, 23 26 "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, 24 27 "joken": {:hex, :joken, "2.6.2", "5daaf82259ca603af4f0b065475099ada1b2b849ff140ccd37f4b6828ca6892a", [:mix], [{:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5134b5b0a6e37494e46dbf9e4dad53808e5e787904b7c73972651b51cce3d72b"}, 25 28 "jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"}, ··· 27 30 "libcluster_consul": {:hex, :libcluster_consul, "1.3.0", "114c8a2d4fdcf3331cf96c42048d79eb3d3ffa2a6c983f68eb215e0717fe2f00", [:mix], [{:libcluster, "~> 3.3.1", [hex: :libcluster, repo: "hexpm", optional: false]}], "hexpm", "fb63bc580f931a5af041c582a565df52bca3c8005c2ada13cce71647e674da25"}, 28 31 "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, 29 32 "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [: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", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, 33 + "mint_web_socket": {:hex, :mint_web_socket, "1.0.4", "0b539116dbb3d3f861cdf5e15e269a933cb501c113a14db7001a3157d96ffafd", [:mix], [{:mint, ">= 1.4.1 and < 2.0.0-0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "027d4c5529c45a4ba0ce27a01c0f35f284a5468519c045ca15f43decb360a991"}, 30 34 "mix_test_watch": {:hex, :mix_test_watch, "1.3.0", "2ffc9f72b0d1f4ecf0ce97b044e0e3c607c3b4dc21d6228365e8bc7c2856dc77", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "f9e5edca976857ffac78632e635750d158df14ee2d6185a15013844af7570ffe"}, 31 35 "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, 32 36 "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, 33 37 "oidcc": {:hex, :oidcc, "3.2.6", "d6fb6391721e83c6e1866d537a386be680dd76d673d1058cc78ac7ebfc723da4", [:mix, :rebar3], [{:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.2", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.1", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "0530b902adce9117e797af41801b41e5e3d2a0288839bf69f2b54b19914fc522"}, 34 38 "open_api_spex": {:hex, :open_api_spex, "3.21.2", "6a704f3777761feeb5657340250d6d7332c545755116ca98f33d4b875777e1e5", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0 or ~> 6.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "f42ae6ed668b895ebba3e02773cfb4b41050df26f803f2ef634c72a7687dc387"}, 39 + "owl": {:hex, :owl, "0.12.2", "65906b525e5c3ef51bab6cba7687152be017aebe1da077bb719a5ee9f7e60762", [:mix], [{:ucwidth, "~> 0.2", [hex: :ucwidth, repo: "hexpm", optional: true]}], "hexpm", "6398efa9e1fea70a04d24231e10dcd66c1ac1aa2da418d20ef5357ec61de2880"}, 35 40 "permit": {:hex, :permit, "0.3.0", "9f54f86e9e19cbccd0779c68985a9b79eb9892a826d2edeb2997c60efe7a9f77", [:mix], [], "hexpm", "aac92428febf4e3856b90a267126a0c68183a86d7785ef70c9ea4bc07cc7764b"}, 36 41 "permit_ecto": {:hex, :permit_ecto, "0.2.4", "bb087a3bbb8caafbd6247d357bb98800f979592718965ddad026f623bb942bbc", [:mix], [{:ecto, ">= 3.11.2 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, ">= 3.11.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:permit, "~> 0.2", [hex: :permit, repo: "hexpm", optional: false]}], "hexpm", "4cc4a600d7331483674f5837a3f203d7a9b1cc1faf805a49f9ff5fd9ccc21ee9"}, 37 42 "phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [: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", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"}, ··· 46 51 "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, 47 52 "postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [: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", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"}, 48 53 "req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"}, 54 + "rewrite": {:hex, :rewrite, "1.1.2", "f5a5d10f5fed1491a6ff48e078d4585882695962ccc9e6c779bae025d1f92eda", [:mix], [{:glob_ex, "~> 0.1", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}, {:text_diff, "~> 0.1", [hex: :text_diff, repo: "hexpm", optional: false]}], "hexpm", "7f8b94b1e3528d0a47b3e8b7bfeca559d2948a65fa7418a9ad7d7712703d39d4"}, 49 55 "shortuuid": {:hex, :shortuuid, "4.1.0", "6f59470b78169c84a0cedbbe3fd4e83f0837a59877a4e1a7c0709916d54239e2", [:mix], [], "hexpm", "7336719118b3cca1ac73e95810199b0b9b7d00f9d71bd2c2d27fed4c4f74388e"}, 56 + "slipstream": {:hex, :slipstream, "1.2.0", "f4e820752339d86d2f15f4103e163f538e3bb9c7fe353225afd1255178e1f051", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mint_web_socket, "~> 0.2 or ~> 1.0", [hex: :mint_web_socket, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.1 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f2fceddbb3c97331d348586e77c6425f4d150242dfaf392d22e8bd22f93d1f1e"}, 57 + "sourceror": {:hex, :sourceror, "1.10.0", "38397dedbbc286966ec48c7af13e228b171332be1ad731974438c77791945ce9", [:mix], [], "hexpm", "29dbdfc92e04569c9d8e6efdc422fc1d815f4bd0055dc7c51b8800fb75c4b3f1"}, 58 + "spitfire": {:hex, :spitfire, "0.2.1", "29e154873f05444669c7453d3d931820822cbca5170e88f0f8faa1de74a79b47", [:mix], [], "hexpm", "6eeed75054a38341b2e1814d41bb0a250564092358de2669fdb57ff88141d91b"}, 50 59 "systemd": {:hex, :systemd, "0.6.2", "aaa24f1e3e6cb978c45369768b1abd766a0dbff637ed61254ca64797bcec9963", [:rebar3], [{:enough, "~> 0.1.0", [hex: :enough, repo: "hexpm", optional: false]}], "hexpm", "5062b911800c1ab05157c7bf9a9fbe23dd24c58891c87fd12d2e3ed8fc1708b8"}, 51 60 "tailwind": {:hex, :tailwind, "0.3.1", "a89d2835c580748c7a975ad7dd3f2ea5e63216dc16d44f9df492fbd12c094bed", [:mix], [], "hexpm", "98a45febdf4a87bc26682e1171acdedd6317d0919953c353fcd1b4f9f4b676a2"}, 52 61 "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, 53 62 "telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"}, 54 63 "telemetry_poller": {:hex, :telemetry_poller, "1.2.0", "ba82e333215aed9dd2096f93bd1d13ae89d249f82760fcada0850ba33bac154b", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7216e21a6c326eb9aa44328028c34e9fd348fb53667ca837be59d0aa2a0156e8"}, 55 64 "telemetry_registry": {:hex, :telemetry_registry, "0.3.2", "701576890320be6428189bff963e865e8f23e0ff3615eade8f78662be0fc003c", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7ed191eb1d115a3034af8e1e35e4e63d5348851d556646d46ca3d1b4e16bab9"}, 65 + "text_diff": {:hex, :text_diff, "0.1.0", "1caf3175e11a53a9a139bc9339bd607c47b9e376b073d4571c031913317fecaa", [:mix], [], "hexpm", "d1ffaaecab338e49357b6daa82e435f877e0649041ace7755583a0ea3362dbd7"}, 56 66 "thousand_island": {:hex, :thousand_island, "1.3.14", "ad45ebed2577b5437582bcc79c5eccd1e2a8c326abf6a3464ab6c06e2055a34a", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d0d24a929d31cdd1d7903a4fe7f2409afeedff092d277be604966cd6aa4307ef"}, 57 67 "typed_struct_ctor": {:hex, :typed_struct_ctor, "0.1.2", "00cc745439e99047615bb0700b43652311c199043293c13335151873505c5d01", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:typed_struct_ecto_changeset, "~> 1.0.0", [hex: :typed_struct_ecto_changeset, repo: "hexpm", optional: false]}, {:typedstruct, "~> 0.5.2", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "79695303f7402f1a5b92e5914446014020b234bbfa1fccc664bacdf47101567f"}, 58 68 "typed_struct_ecto_changeset": {:hex, :typed_struct_ecto_changeset, "1.1.0", "dd1924c786798284e7e8f2844ea6638a293cdcf13573ad758c5b2cb36bf51288", [:mix], [], "hexpm", "10f56689b7ca7c5e96aceb49b08a30712a36b35f987ebc4d20be47177d53fa73"},
+9 -26
nix/packages/agent.nix
··· 12 12 src = lib.fileset.toSource { 13 13 root = ../..; 14 14 fileset = lib.fileset.unions [ 15 - ../../agent 16 - ../../client-elixir 15 + ../../apps/sower_agent 16 + ../../apps/sower_client 17 + ../../config 18 + ../../mix.exs 19 + ../../mix.lock 20 + ../../VERSION 17 21 ]; 18 22 }; 19 23 20 - preConfigure = '' 21 - cd agent 22 - ''; 24 + mixReleaseName = "agent"; 23 25 24 - mixNixDeps = callPackages ../../agent/deps.nix { 25 - inherit lib beamPackages; 26 - overrides = self: prev: { 27 - typedstruct = prev.typedstruct.override (old: { 28 - preConfigure = '' 29 - substituteInPlace mix.exs --replace-fail 'version = vsn()' 'version = "${old.version}"' 30 - ''; 31 - }); 32 - 33 - typed_struct_ecto_changeset = prev.typed_struct_ecto_changeset.override (old: { 34 - beamDeps = [ self.typedstruct ]; 35 - 36 - preConfigure = '' 37 - substituteInPlace mix.exs --replace-fail \ 38 - '{:typed_struct, "~> 0.3.0", only: [:dev, :test], runtime: false}' \ 39 - '{:typedstruct, "${self.typedstruct.version}"}' 40 - ''; 41 - }); 42 - }; 43 - }; 26 + mixNixDeps = callPackages ./umbrella-deps.nix { inherit beamPackages; }; 44 27 45 28 postInstall = '' 46 - mv $out/bin/sower_agent $out/bin/sower-agent 29 + mv $out/bin/agent $out/bin/sower-agent 47 30 ''; 48 31 49 32 # Disable checks for now
+45
nix/packages/deps.nix
··· 621 621 in 622 622 drv; 623 623 624 + mint_web_socket = 625 + let 626 + version = "1.0.4"; 627 + drv = buildMix { 628 + inherit version; 629 + name = "mint_web_socket"; 630 + appConfigPath = ../../config; 631 + 632 + src = fetchHex { 633 + inherit version; 634 + pkg = "mint_web_socket"; 635 + sha256 = "027d4c5529c45a4ba0ce27a01c0f35f284a5468519c045ca15f43decb360a991"; 636 + }; 637 + 638 + beamDeps = [ 639 + mint 640 + ]; 641 + }; 642 + in 643 + drv; 644 + 624 645 nimble_options = 625 646 let 626 647 version = "1.1.1"; ··· 998 1019 pkg = "shortuuid"; 999 1020 sha256 = "7336719118b3cca1ac73e95810199b0b9b7d00f9d71bd2c2d27fed4c4f74388e"; 1000 1021 }; 1022 + }; 1023 + in 1024 + drv; 1025 + 1026 + slipstream = 1027 + let 1028 + version = "1.2.0"; 1029 + drv = buildMix { 1030 + inherit version; 1031 + name = "slipstream"; 1032 + appConfigPath = ../../config; 1033 + 1034 + src = fetchHex { 1035 + inherit version; 1036 + pkg = "slipstream"; 1037 + sha256 = "f2fceddbb3c97331d348586e77c6425f4d150242dfaf392d22e8bd22f93d1f1e"; 1038 + }; 1039 + 1040 + beamDeps = [ 1041 + jason 1042 + mint_web_socket 1043 + nimble_options 1044 + telemetry 1045 + ]; 1001 1046 }; 1002 1047 in 1003 1048 drv;
+6 -62
nix/packages/server.nix
··· 5 5 callPackages, 6 6 beamPackages, 7 7 esbuild, 8 - rustPlatform, 9 8 tailwindcss, 10 9 stdenv, 11 10 version, ··· 22 21 src = lib.fileset.toSource { 23 22 root = ../..; 24 23 fileset = lib.fileset.unions [ 25 - ../../assets 26 - ../../client-elixir 24 + ../../apps/sower 25 + ../../apps/sower_client 27 26 ../../config 28 - ../../lib 29 27 ../../mix.exs 30 28 ../../mix.lock 31 - ../../priv 32 - ../../test 33 29 ../../VERSION 34 30 ]; 35 31 }; 36 32 33 + mixReleaseName = "server"; 34 + 37 35 nativeBuildInputs = [ sowerServicesHook ]; 38 36 39 37 sowerServices = sowerLib.generateUnitFiles { ··· 53 51 }; 54 52 }; 55 53 56 - mixNixDeps = callPackages ./deps.nix { 57 - inherit lib beamPackages; 58 - overrides = self: prev: { 59 - argon2 = prev.argon2.override ( 60 - old: 61 - let 62 - native = rustPlatform.buildRustPackage { 63 - pname = "argon2"; 64 - version = old.version; 65 - src = "${old.src}/native"; 66 - cargoHash = "sha256-D7mONUH6f/RmFwfx51sLr6XWlIELNTFPvFm9TrbEMl4="; 67 - useFetchCargoVendor = true; 68 - }; 69 - in 70 - { 71 - # pre-build the make target 72 - preBuild = '' 73 - mkdir -p priv/ 74 - cp ${native}/lib/libargon2.so priv/argon2_${old.version}.so 75 - ''; 76 - 77 - # move native into expected location 78 - postInstall = '' 79 - mv $out/lib/erlang/lib/argon2-${old.version}/priv/argon2_${old.version}.so $out/lib/erlang/lib/argon2-${old.version}/priv/argon2.so 80 - ''; 81 - } 82 - ); 83 - 84 - esbuild = prev.esbuild.override (old: { 85 - patches = [ ./esbuild-loadpaths.patch ]; 86 - }); 87 - 88 - typedstruct = prev.typedstruct.override (old: { 89 - preConfigure = '' 90 - substituteInPlace mix.exs --replace-fail 'version = vsn()' 'version = "${old.version}"' 91 - ''; 92 - }); 93 - 94 - typed_struct_ecto_changeset = prev.typed_struct_ecto_changeset.override (old: { 95 - beamDeps = [ self.typedstruct ]; 96 - 97 - preConfigure = '' 98 - substituteInPlace mix.exs --replace-fail \ 99 - '{:typed_struct, "~> 0.3.0", only: [:dev, :test], runtime: false}' \ 100 - '{:typedstruct, "${self.typedstruct.version}"}' 101 - ''; 102 - }); 103 - 104 - tailwind = prev.tailwind.override (old: { 105 - patches = [ ./tailwind-loadpaths.patch ]; 106 - }); 107 - }; 108 - }; 54 + mixNixDeps = callPackages ./umbrella-deps.nix { inherit beamPackages; }; 109 55 110 56 postBuild = '' 111 57 # prevent mix from trying to download binaries 112 58 ln -sfv ${lib.getExe esbuild} _build/esbuild-${os}-${arch} 113 59 ln -sfv ${lib.getExe tailwindcss} _build/tailwind-${os}-${arch} 114 60 115 - mix assets.deploy --no-deps-check 61 + mix do deps.loadpaths --no-deps-check, assets.deploy --no-deps-check 116 62 ''; 117 - 118 - preInstall = ''''; 119 63 120 64 # disabled because requires test deps to work 121 65 # doCheck = true;
+60
nix/packages/umbrella-deps.nix
··· 1 + { 2 + beamPackages, 3 + callPackages, 4 + lib, 5 + rustPlatform, 6 + }: 7 + 8 + callPackages ./deps.nix { 9 + inherit lib beamPackages; 10 + overrides = self: prev: { 11 + argon2 = prev.argon2.override ( 12 + old: 13 + let 14 + native = rustPlatform.buildRustPackage { 15 + pname = "argon2"; 16 + version = old.version; 17 + src = "${old.src}/native"; 18 + cargoHash = "sha256-D7mONUH6f/RmFwfx51sLr6XWlIELNTFPvFm9TrbEMl4="; 19 + useFetchCargoVendor = true; 20 + }; 21 + in 22 + { 23 + # pre-build the make target 24 + preBuild = '' 25 + mkdir -p priv/ 26 + cp ${native}/lib/libargon2.so priv/argon2_${old.version}.so 27 + ''; 28 + 29 + # move native into expected location 30 + postInstall = '' 31 + mv $out/lib/erlang/lib/argon2-${old.version}/priv/argon2_${old.version}.so $out/lib/erlang/lib/argon2-${old.version}/priv/argon2.so 32 + ''; 33 + } 34 + ); 35 + 36 + esbuild = prev.esbuild.override (old: { 37 + patches = [ ./esbuild-loadpaths.patch ]; 38 + }); 39 + 40 + typedstruct = prev.typedstruct.override (old: { 41 + preConfigure = '' 42 + substituteInPlace mix.exs --replace-fail 'version = vsn()' 'version = "${old.version}"' 43 + ''; 44 + }); 45 + 46 + typed_struct_ecto_changeset = prev.typed_struct_ecto_changeset.override (old: { 47 + beamDeps = [ self.typedstruct ]; 48 + 49 + preConfigure = '' 50 + substituteInPlace mix.exs --replace-fail \ 51 + '{:typed_struct, "~> 0.3.0", only: [:dev, :test], runtime: false}' \ 52 + '{:typedstruct, "${self.typedstruct.version}"}' 53 + ''; 54 + }); 55 + 56 + tailwind = prev.tailwind.override (old: { 57 + patches = [ ./tailwind-loadpaths.patch ]; 58 + }); 59 + }; 60 + }
priv/gettext/en/LC_MESSAGES/errors.po apps/sower/priv/gettext/en/LC_MESSAGES/errors.po
priv/gettext/errors.pot apps/sower/priv/gettext/errors.pot
priv/repo/migrations/.formatter.exs apps/sower/priv/repo/migrations/.formatter.exs
priv/repo/migrations/20240803030000_organizations.exs apps/sower/priv/repo/migrations/20240803030000_organizations.exs
priv/repo/migrations/20240803030149_create_seeds.exs apps/sower/priv/repo/migrations/20240803030149_create_seeds.exs
priv/repo/migrations/20240803032700_create_forges.exs apps/sower/priv/repo/migrations/20240803032700_create_forges.exs
priv/repo/migrations/20240803032719_create_repositories.exs apps/sower/priv/repo/migrations/20240803032719_create_repositories.exs
priv/repo/migrations/20240807035631_clients.exs apps/sower/priv/repo/migrations/20240807035631_clients.exs
priv/repo/migrations/20240831023317_create_users_auth_tables.exs apps/sower/priv/repo/migrations/20240831023317_create_users_auth_tables.exs
priv/repo/migrations/20240924025122_access_tokens.exs apps/sower/priv/repo/migrations/20240924025122_access_tokens.exs
priv/repo/migrations/20250111150104_create_nix_caches.exs apps/sower/priv/repo/migrations/20250111150104_create_nix_caches.exs
priv/repo/migrations/20250531133248_create_deployments.exs apps/sower/priv/repo/migrations/20250531133248_create_deployments.exs
priv/repo/migrations/20250531134025_create_seeds_deployments.exs apps/sower/priv/repo/migrations/20250531134025_create_seeds_deployments.exs
priv/repo/migrations/20250531134253_create_store_paths_deployments.exs apps/sower/priv/repo/migrations/20250531134253_create_store_paths_deployments.exs
priv/repo/migrations/20250616035226_create_agents.exs apps/sower/priv/repo/migrations/20250616035226_create_agents.exs
priv/repo/seeds-user.exs apps/sower/priv/repo/seeds-user.exs
priv/repo/seeds.exs apps/sower/priv/repo/seeds.exs
priv/static/favicon.ico apps/sower/priv/static/favicon.ico
-6
priv/static/images/logo.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71 48" fill="currentColor" aria-hidden="true"> 2 - <path 3 - d="m26.371 33.477-.552-.1c-3.92-.729-6.397-3.1-7.57-6.829-.733-2.324.597-4.035 3.035-4.148 1.995-.092 3.362 1.055 4.57 2.39 1.557 1.72 2.984 3.558 4.514 5.305 2.202 2.515 4.797 4.134 8.347 3.634 3.183-.448 5.958-1.725 8.371-3.828.363-.316.761-.592 1.144-.886l-.241-.284c-2.027.63-4.093.841-6.205.735-3.195-.16-6.24-.828-8.964-2.582-2.486-1.601-4.319-3.746-5.19-6.611-.704-2.315.736-3.934 3.135-3.6.948.133 1.746.56 2.463 1.165.583.493 1.143 1.015 1.738 1.493 2.8 2.25 6.712 2.375 10.265-.068-5.842-.026-9.817-3.24-13.308-7.313-1.366-1.594-2.7-3.216-4.095-4.785-2.698-3.036-5.692-5.71-9.79-6.623C12.8-.623 7.745.14 2.893 2.361 1.926 2.804.997 3.319 0 4.149c.494 0 .763.006 1.032 0 2.446-.064 4.28 1.023 5.602 3.024.962 1.457 1.415 3.104 1.761 4.798.513 2.515.247 5.078.544 7.605.761 6.494 4.08 11.026 10.26 13.346 2.267.852 4.591 1.135 7.172.555ZM10.751 3.852c-.976.246-1.756-.148-2.56-.962 1.377-.343 2.592-.476 3.897-.528-.107.848-.607 1.306-1.336 1.49Zm32.002 37.924c-.085-.626-.62-.901-1.04-1.228-1.857-1.446-4.03-1.958-6.333-2-1.375-.026-2.735-.128-4.031-.61-.595-.22-1.26-.505-1.244-1.272.015-.78.693-1 1.31-1.184.505-.15 1.026-.247 1.6-.382-1.46-.936-2.886-1.065-4.787-.3-2.993 1.202-5.943 1.06-8.926-.017-1.684-.608-3.179-1.563-4.735-2.408l-.077.057c1.29 2.115 3.034 3.817 5.004 5.271 3.793 2.8 7.936 4.471 12.784 3.73A66.714 66.714 0 0 1 37 40.877c1.98-.16 3.866.398 5.753.899Zm-9.14-30.345c-.105-.076-.206-.266-.42-.069 1.745 2.36 3.985 4.098 6.683 5.193 4.354 1.767 8.773 2.07 13.293.51 3.51-1.21 6.033-.028 7.343 3.38.19-3.955-2.137-6.837-5.843-7.401-2.084-.318-4.01.373-5.962.94-5.434 1.575-10.485.798-15.094-2.553Zm27.085 15.425c.708.059 1.416.123 2.124.185-1.6-1.405-3.55-1.517-5.523-1.404-3.003.17-5.167 1.903-7.14 3.972-1.739 1.824-3.31 3.87-5.903 4.604.043.078.054.117.066.117.35.005.699.021 1.047.005 3.768-.17 7.317-.965 10.14-3.7.89-.86 1.685-1.817 2.544-2.71.716-.746 1.584-1.159 2.645-1.07Zm-8.753-4.67c-2.812.246-5.254 1.409-7.548 2.943-1.766 1.18-3.654 1.738-5.776 1.37-.374-.066-.75-.114-1.124-.17l-.013.156c.135.07.265.151.405.207.354.14.702.308 1.07.395 4.083.971 7.992.474 11.516-1.803 2.221-1.435 4.521-1.707 7.013-1.336.252.038.503.083.756.107.234.022.479.255.795.003-2.179-1.574-4.526-2.096-7.094-1.872Zm-10.049-9.544c1.475.051 2.943-.142 4.486-1.059-.452.04-.643.04-.827.076-2.126.424-4.033-.04-5.733-1.383-.623-.493-1.257-.974-1.889-1.457-2.503-1.914-5.374-2.555-8.514-2.5.05.154.054.26.108.315 3.417 3.455 7.371 5.836 12.369 6.008Zm24.727 17.731c-2.114-2.097-4.952-2.367-7.578-.537 1.738.078 3.043.632 4.101 1.728a13 13 0 0 0 1.182 1.106c1.6 1.29 4.311 1.352 5.896.155-1.861-.726-1.861-.726-3.601-2.452Zm-21.058 16.06c-1.858-3.46-4.981-4.24-8.59-4.008a9.667 9.667 0 0 1 2.977 1.39c.84.586 1.547 1.311 2.243 2.055 1.38 1.473 3.534 2.376 4.962 2.07-.656-.412-1.238-.848-1.592-1.507Zl-.006.006-.036-.004.021.018.012.053Za.127.127 0 0 0 .015.043c.005.008.038 0 .058-.002Zl-.008.01.005.026.024.014Z" 4 - fill="#FD4F00" 5 - /> 6 - </svg>
priv/static/robots.txt apps/sower/priv/static/robots.txt
test/sower/accounts/user_test.exs apps/sower/test/sower/accounts/user_test.exs
test/sower/forge_test.exs apps/sower/test/sower/forge_test.exs
test/sower/nix_test.exs apps/sower/test/sower/nix_test.exs
test/sower/orchestration_test.exs apps/sower/test/sower/orchestration_test.exs
test/sower/seed_test.exs apps/sower/test/sower/seed_test.exs
test/sower_web/live/agent_live_test.exs apps/sower/test/sower_web/live/agent_live_test.exs
test/sower_web/live/cache_live_test.exs apps/sower/test/sower_web/live/cache_live_test.exs
test/sower_web/live/forge/connection_live_test.exs apps/sower/test/sower_web/live/forge/connection_live_test.exs
test/sower_web/live/nix/store_path_live_test.exs apps/sower/test/sower_web/live/nix/store_path_live_test.exs
test/sower_web/live/settings/access_token_live_test.exs apps/sower/test/sower_web/live/settings/access_token_live_test.exs
test/sower_web/user_auth_test.exs apps/sower/test/sower_web/user_auth_test.exs
test/support/conn_case.ex apps/sower/test/support/conn_case.ex
test/support/data_case.ex apps/sower/test/support/data_case.ex
test/support/fixtures/accounts_fixtures.ex apps/sower/test/support/fixtures/accounts_fixtures.ex
test/support/fixtures/forge_fixtures.ex apps/sower/test/support/fixtures/forge_fixtures.ex
test/support/fixtures/nix_fixtures.ex apps/sower/test/support/fixtures/nix_fixtures.ex
test/support/fixtures/orchestration_fixtures.ex apps/sower/test/support/fixtures/orchestration_fixtures.ex
test/support/fixtures/seed_fixtures.ex apps/sower/test/support/fixtures/seed_fixtures.ex
test/test_helper.exs apps/sower/test/test_helper.exs