From 9d3d169b22e20331e5cdec7c052e70d1836e5f16 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 9 Jan 2023 11:27:03 +0700 Subject: [PATCH] Initial commit after a bunch of development. --- .eslintrc.json | 277 + .gitignore | 23 + README.md | 62 +- admin/App.svelte | 13 + admin/Header.svelte | 52 + admin/Layout.svelte | 48 + admin/bando/Bandolier.svelte | 116 + admin/bando/Components.svelte | 224 + admin/bando/Djenterator.svelte | 152 + admin/bando/IconFinder.svelte | 194 + admin/bando/demos/Accordion.svelte | 21 + admin/bando/demos/Accordion.svelte.md | 7 + admin/bando/demos/AspectRatio.svelte | 26 + admin/bando/demos/AspectRatio.svelte.md | 12 + admin/bando/demos/Badge.svelte | 51 + admin/bando/demos/Badge.svelte.md | 3 + admin/bando/demos/ButtonGroup.svelte | 25 + admin/bando/demos/ButtonGroup.svelte.md | 1 + admin/bando/demos/Calendar.svelte | 27 + admin/bando/demos/Calendar.svelte.md | 1 + admin/bando/demos/Callout.svelte | 37 + admin/bando/demos/Callout.svelte.md | 8 + admin/bando/demos/Cards.svelte | 46 + admin/bando/demos/Cards.svelte.md | 1 + admin/bando/demos/Carousel.svelte | 25 + admin/bando/demos/Carousel.svelte.md | 1 + admin/bando/demos/Chat.svelte | 14 + admin/bando/demos/Chat.svelte.md | 1 + admin/bando/demos/Code.svelte | 53 + admin/bando/demos/Code.svelte.md | 25 + admin/bando/demos/Countdown.svelte | 16 + admin/bando/demos/Countdown.svelte.md | 1 + admin/bando/demos/Darkmode.svelte | 6 + admin/bando/demos/Darkmode.svelte.md | 21 + admin/bando/demos/DataTable.svelte | 71 + admin/bando/demos/DataTable.svelte.md | 3 + admin/bando/demos/FairPay.svelte | 252 + admin/bando/demos/FairPay.svelte.md | 16 + admin/bando/demos/Flipper.svelte | 52 + admin/bando/demos/Flipper.svelte.md | 13 + admin/bando/demos/Form.svelte | 78 + admin/bando/demos/Form.svelte.md | 10 + admin/bando/demos/HLSVideo.svelte | 10 + admin/bando/demos/Icon.svelte | 63 + admin/bando/demos/Icon.svelte.md | 5 + admin/bando/demos/IconImage.svelte | 56 + admin/bando/demos/LiveStream.svelte | 27 + admin/bando/demos/LiveStream.svelte.md | 5 + admin/bando/demos/LoggedIn.svelte | 17 + admin/bando/demos/LoggedIn.svelte.md | 16 + admin/bando/demos/Login.svelte | 13 + admin/bando/demos/Login.svelte.md | 5 + admin/bando/demos/Markdown.svelte | 51 + admin/bando/demos/Modal.svelte | 32 + admin/bando/demos/Modal.svelte.md | 8 + admin/bando/demos/OGPreview.svelte | 42 + admin/bando/demos/OGPreview.svelte.md | 32 + admin/bando/demos/Pagination.svelte | 33 + admin/bando/demos/Pagination.svelte.md | 1 + admin/bando/demos/Panels.svelte | 6 + admin/bando/demos/PlaceHolder.svelte | 21 + admin/bando/demos/PlaceHolder.svelte.md | 3 + admin/bando/demos/Progress.svelte | 33 + admin/bando/demos/Progress.svelte.md | 13 + admin/bando/demos/Sidebar.svelte | 26 + admin/bando/demos/Sidebar.svelte.md | 6 + admin/bando/demos/SidebarCSS.svelte | 35 + admin/bando/demos/SidebarCSS.svelte.md | 3 + admin/bando/demos/SnapImage.svelte | 15 + admin/bando/demos/SnapImage.svelte.md | 29 + admin/bando/demos/Spinner.svelte | 13 + admin/bando/demos/Spinner.svelte.md | 16 + admin/bando/demos/StackLayer.svelte | 39 + admin/bando/demos/StackLayer.svelte.md | 25 + admin/bando/demos/Switch.svelte | 48 + admin/bando/demos/Switch.svelte.md | 4 + admin/bando/demos/Tabs.svelte | 22 + admin/bando/demos/Tabs.svelte.md | 5 + admin/bando/demos/Tiles.svelte | 32 + admin/bando/demos/Tiles.svelte.md | 1 + admin/bando/demos/Toast.svelte | 35 + admin/bando/demos/Toast.svelte.md | 4 + admin/bando/demos/Toastier.svelte | 19 + admin/bando/demos/Toastier.svelte.md | 21 + admin/bando/demos/Tooltip.svelte | 66 + admin/bando/demos/Tooltip.svelte.md | 12 + admin/bando/demos/Video.svelte | 16 + admin/bando/demos/Video.svelte.md | 5 + admin/bando/demos/WTVideo.svelte | 23 + admin/bando/demos/WTVideo.svelte.md | 24 + admin/main.js | 10 + admin/pages/Create.svelte | 66 + admin/pages/DocsBrowser.svelte | 286 + admin/pages/EmailConfig.svelte | 84 + admin/pages/EmailDNS.svelte | 147 + admin/pages/EmailSend.svelte | 61 + admin/pages/Errors.svelte | 103 + admin/pages/Home.svelte | 104 + admin/pages/ReadUpdate.svelte | 151 + admin/pages/Routes.svelte | 117 + admin/pages/Stats.svelte | 342 + admin/pages/Table.svelte | 97 + admin/pages/TableIndex.svelte | 85 + admin/pages/Tests.svelte | 63 + admin/routes.js | 25 + api/_errors.js | 11 + api/admin/email.js | 171 + api/admin/schema.js | 21 + api/admin/table.js | 143 + api/authcheck.js | 17 + api/devtools/djenterator.js | 14 + api/devtools/info.js | 32 + api/discord.js | 25 + api/email.js | 35 + api/livestream.js | 87 + api/login.js | 35 + api/logout.js | 14 + api/media.js | 27 + api/media_like.js | 28 + api/password_reset.js | 68 + api/payments/btcpay.js | 140 + api/payments/fake.js | 63 + api/payments/paypal.js | 74 + api/payments/stripe.js | 126 + api/payments/stripe_webhook.js | 46 + api/product.js | 32 + api/register.js | 70 + api/user/payments.js | 20 + api/user/profile.js | 39 + bando.js | 83 + bando.ps1 | 1 + build.json | 38 + build.prod.json | 38 + client/App.svelte | 13 + client/Footer.svelte | 85 + client/Header.svelte | 47 + client/Layout.svelte | 48 + client/api.js | 466 + client/assert.js | 48 + client/components/BTCPay.svelte | 118 + client/components/Blockstart.svelte | 13 + client/components/Calendar.svelte | 140 + client/components/Carousel.svelte | 108 + client/components/Chat.svelte | 217 + client/components/Code.svelte | 100 + client/components/CodeFormatter.svelte | 9 + client/components/Countdown.svelte | 82 + client/components/Darkmode.svelte | 37 + client/components/DataTable.svelte | 178 + client/components/DiscordReplay.svelte | 170 + client/components/FakePayment.svelte | 29 + client/components/Form.svelte | 54 + client/components/FormField.svelte | 36 + client/components/HLSVideo.svelte | 309 + client/components/HTML.svelte | 24 + client/components/HeadOnce.svelte | 11 + client/components/Icon.svelte | 54 + client/components/IconImage.svelte | 58 + client/components/IsVisible.svelte | 32 + client/components/LoggedIn.svelte | 76 + client/components/Login.svelte | 74 + client/components/Markdown.svelte | 25 + client/components/Modal.svelte | 56 + client/components/OGPreview.svelte | 37 + client/components/Pagination.svelte | 74 + client/components/Paypal.svelte | 182 + client/components/PlaceHolder.svelte | 21 + client/components/ProgressMeter.svelte | 19 + client/components/Reloader.svelte | 15 + client/components/ShareButton.svelte | 16 + client/components/Sidebar.svelte | 47 + client/components/SnapImage.svelte | 67 + client/components/Source.svelte | 53 + client/components/Spinner.svelte | 51 + client/components/Stripe.svelte | 147 + client/components/TOS.svelte | 24 + client/components/Tabs.svelte | 63 + client/components/Toasts.svelte | 26 + client/components/Video.svelte | 43 + client/components/WTVideo.svelte | 138 + client/fsm.js | 219 + client/helpers.js | 339 + client/livestreams.js | 60 + client/logging.js | 66 + client/main.js | 15 + client/pages/Discord.svelte | 104 + client/pages/Home.svelte | 117 + client/pages/Landing.svelte | 115 + client/pages/Live.svelte | 287 + client/pages/LiveIndex.svelte | 156 + client/pages/Login.svelte | 26 + client/pages/NotFound.svelte | 1 + client/pages/Payment.svelte | 411 + client/pages/Register.svelte | 214 + client/pages/ResetPassword.svelte | 121 + client/pages/TOS.svelte | 16 + client/pages/Unsubscribe.svelte | 73 + client/pages/UserProfile.svelte | 98 + client/pages/Video.svelte | 120 + client/pages/VideoIndex.svelte | 61 + client/routes.js | 33 + client/stores.js | 54 + client/websocket.js | 50 + client/wt.js | 281 + commands/api.js | 336 + commands/build.js | 194 + commands/codedoc.js | 345 + commands/convert.js | 169 + commands/coverage.js | 105 + commands/deploy.js | 61 + commands/devsvc.js | 58 + commands/djent.js | 60 + commands/gen_players.js | 34 + commands/icons.js | 101 + commands/init.js | 90 + commands/livestreams.js | 45 + commands/loganalyzer.js | 295 + commands/lorem.js | 74 + commands/media.js | 185 + commands/moovfix.js | 43 + commands/queue.js | 44 + commands/rendered.js | 20 + commands/templates/client/Footer.svelte | 82 + commands/templates/client/Header.svelte | 49 + commands/templates/client/Layout.svelte | 48 + commands/templates/client/config.js | 121 + commands/templates/client/pages/Home.svelte | 29 + commands/templates/client/routes.js | 32 + commands/templates/emails/config.js | 17 + commands/templates/rendered/Footer.svelte | 84 + commands/templates/rendered/Header.svelte | 40 + commands/templates/rendered/Layout.svelte | 33 + commands/templates/rendered/index.svelte | 216 + .../templates/rendered/pages/index.svelte | 216 + commands/templates/secrets/config.json | 54 + commands/templates/secrets/email.json | 7 + commands/thumbnail.js | 39 + commands/tracker.js | 70 + commands/unsubkeys.js | 15 + emails/change_email.txt | 26 + emails/discord_email.html | 499 + emails/discord_email.txt | 24 + emails/invoice.html | 539 + emails/invoice.txt | 58 + emails/receipt.html | 511 + emails/receipt.txt | 33 + emails/register_email.html | 515 + emails/register_email.txt | 28 + emails/reset_email.html | 489 + emails/reset_email.txt | 32 + emails/reset_finished.html | 488 + emails/reset_finished.txt | 25 + emails/test.html | 1 + emails/test.txt | 1 + emails/welcome_email.html | 516 + emails/welcome_email.txt | 28 + knexfile.cjs | 45 + lib/api.js | 411 + lib/auth.js | 241 + lib/blog.js | 97 + lib/builderator.js | 166 + lib/config.js | 172 + lib/devtools.js | 28 + lib/docgen.js | 305 + lib/email.js | 232 + lib/logging.js | 54 + lib/models.js | 408 + lib/ormish.js | 613 + lib/queues.js | 150 + lib/testing.js | 273 + migrations/20210407193844_initial.cjs | 19 + migrations/20210508193210_reset_codes.cjs | 14 + migrations/20210724194201_payments.cjs | 32 + migrations/20210801144128_media.cjs | 14 + migrations/20210807180515_user_payment.cjs | 17 + .../20210823001710_media_needs_poster.cjs | 11 + migrations/20210828133355_site_metadata.cjs | 16 + .../20210911122326_user_unsubscribe.cjs | 15 + .../20210911191222_user_reset_count.cjs | 12 + .../20211111034030_media_meta_fields.cjs | 31 + migrations/20211122202014_media_add_slug.cjs | 15 + .../20220107182030_user_payment_remove.cjs | 25 + migrations/20220224195155_livestream.cjs | 24 + migrations/20220228190915_unsubkey_32_hex.cjs | 13 + .../20220314020215_payment_substate_cause.cjs | 11 + ...20426213105_livestream_add_state_check.cjs | 31 + .../20220427232344_livestream_media.cjs | 12 + .../20220428184247_livestream_viewers.cjs | 11 + ...220507231257_livestream_episode_number.cjs | 11 + migrations/20220522091823_product.cjs | 18 + migrations/20220603163208_likes_on_videos.cjs | 13 + ...220921230725_payment_random_receipt_id.cjs | 28 + nodemon.json | 16 + package-lock.json | 26185 ++++++++++++++++ package.json | 139 + queues/discord.js | 88 + queues/live.js | 27 + queues/mail.js | 171 + queues/paypal.js | 87 + queues/stripe.js | 77 + rendered/Footer.svelte | 86 + rendered/Header.svelte | 40 + rendered/Layout.svelte | 33 + ...long-start-step-01-the-unstyled-fake-ui.md | 11 + ...ng-start-step-02-the-blockstart-fake-ui.md | 11 + .../long-start-step-03-the-styled-fake-ui.md | 11 + .../long-start-step-04-testing-the-fake-ui.md | 11 + ...long-start-step-05-the-fake-api-handler.md | 11 + .../long-start-step-06-the-database-table.md | 11 + ...t-step-07-libmodelsjs-and-model-testing.md | 11 + ...g-start-step-08-the-api-to-the-database.md | 11 + ...-adding-registration-and-authentication.md | 11 + ...tart-step-10-static-leaderboard-command.md | 11 + .../long-start-step-11-emailing-winners.md | 11 + ...tart-step-12-sending-emails-with-queues.md | 11 + ...art-step-13-advanced-fancy-fsm-based-ui.md | 11 + ...t-step-14-delayed-optional-registration.md | 11 + ...t-step-15-websocket-winner-notification.md | 11 + rendered/docs/long-start.md | 470 + rendered/docs/quick-start.md | 320 + rendered/docs/tips-tricks.md | 34 + rendered/feed_index.json | 21 + rendered/index.svelte | 216 + rendered/pages/about/index.svelte | 22 + rendered/pages/blog/[slug]/index.svelte | 164 + rendered/pages/blog/index.svelte | 88 + rendered/pages/docs/[slug]/index.svelte | 89 + rendered/pages/docs/howto/[slug]/index.svelte | 176 + rendered/pages/docs/howto/index.svelte | 70 + rendered/pages/docs/index.svelte | 85 + rendered/pages/index.svelte | 121 + rendered/pages/live/[slug]/index.svelte | 218 + rendered/pages/live/[slug]/player.svelte | 36 + rendered/pages/live/index.js | 53 + rendered/pages/live/index.svelte | 160 + rendered/pages/privacy/index.svelte | 166 + rendered/pages/test_large_card.svelte | 51 + rendered/pages/test_og_card.svelte | 51 + rendered/pages/test_video_card.svelte | 64 + rendered/pages/video_container.svelte | 17 + rendered/player.html | 51 + rendered/rollup.config.mjs | 137 + rendered/src/template.html | 22 + scripts/osx.config.cjs | 17 + scripts/prod.config.cjs | 45 + scripts/setupTypeScript.js | 117 + socket/chat.js | 5 + socket/live.js | 5 + socket/reloader.js | 7 + static/admin/index.html | 27 + static/android-chrome-192x192.png | Bin 0 -> 1190 bytes static/android-chrome-512x512.png | Bin 0 -> 2054 bytes static/apple-touch-icon.png | Bin 0 -> 5557 bytes static/blockstart.css | 240 + static/browserconfig.xml | 9 + static/client/index.html | 28 + static/color.css | 134 + static/css/pattern.min.css | 1 + static/css/prism.css | 145 + static/djenterator/api.js | 22 + static/djenterator/api.js.vars | 11 + static/djenterator/client.svelte | 34 + static/djenterator/client.svelte.vars | 1 + static/djenterator/command.js | 49 + static/djenterator/command.js.vars | 1 + static/djenterator/form.svelte | 102 + static/djenterator/form.svelte.vars | 49 + static/djenterator/migration.js | 18 + static/djenterator/migration.js.vars | 1 + static/djenterator/queues.js | 12 + static/djenterator/queues.js.vars | 1 + static/djenterator/rendered.svelte | 19 + static/djenterator/rendered.svelte.vars | 1 + static/djenterator/socket.js | 11 + static/djenterator/socket.js.vars | 7 + static/djenterator/ui_test.js | 23 + static/djenterator/ui_test.js.vars | 4 + static/favicon-16x16.png | Bin 0 -> 351 bytes static/favicon-32x32.png | Bin 0 -> 505 bytes static/favicon.ico | Bin 0 -> 2734 bytes static/favicon.png | Bin 0 -> 3127 bytes static/feather-sprite.svg | 1 + static/fonts/IMFellEnglishSC-Regular.ttf | Bin 0 -> 180328 bytes static/fonts/computer.woff | Bin 0 -> 9416 bytes static/global.css | 1542 + static/icons/LICENSE | 15 + static/icons/accessibility.svg | 17 + static/icons/activity.svg | 13 + static/icons/air-vent.svg | 16 + static/icons/airplay.svg | 14 + static/icons/alarm-check.svg | 18 + static/icons/alarm-clock-off.svg | 18 + static/icons/alarm-clock.svg | 18 + static/icons/alarm-minus.svg | 18 + static/icons/alarm-plus.svg | 19 + static/icons/album.svg | 14 + static/icons/alert-circle.svg | 15 + static/icons/alert-octagon.svg | 15 + static/icons/alert-triangle.svg | 15 + static/icons/align-center-horizontal.svg | 17 + static/icons/align-center-vertical.svg | 17 + static/icons/align-center.svg | 15 + static/icons/align-end-horizontal.svg | 15 + static/icons/align-end-vertical.svg | 15 + .../align-horizontal-distribute-center.svg | 18 + .../icons/align-horizontal-distribute-end.svg | 16 + .../align-horizontal-distribute-start.svg | 16 + .../icons/align-horizontal-justify-center.svg | 15 + static/icons/align-horizontal-justify-end.svg | 15 + .../icons/align-horizontal-justify-start.svg | 15 + .../icons/align-horizontal-space-around.svg | 15 + .../icons/align-horizontal-space-between.svg | 16 + static/icons/align-justify.svg | 15 + static/icons/align-left.svg | 15 + static/icons/align-right.svg | 15 + static/icons/align-start-horizontal.svg | 15 + static/icons/align-start-vertical.svg | 15 + .../align-vertical-distribute-center.svg | 18 + .../icons/align-vertical-distribute-end.svg | 16 + .../icons/align-vertical-distribute-start.svg | 16 + .../icons/align-vertical-justify-center.svg | 15 + static/icons/align-vertical-justify-end.svg | 15 + static/icons/align-vertical-justify-start.svg | 15 + static/icons/align-vertical-space-around.svg | 15 + static/icons/align-vertical-space-between.svg | 16 + static/icons/anchor.svg | 15 + static/icons/angry.svg | 18 + static/icons/annoyed.svg | 16 + static/icons/aperture.svg | 19 + static/icons/apple.svg | 14 + static/icons/archive-restore.svg | 17 + static/icons/archive.svg | 15 + static/icons/armchair.svg | 16 + static/icons/arrow-big-down.svg | 13 + static/icons/arrow-big-left.svg | 13 + static/icons/arrow-big-right.svg | 13 + static/icons/arrow-big-up.svg | 13 + static/icons/arrow-down-circle.svg | 15 + static/icons/arrow-down-left.svg | 14 + static/icons/arrow-down-right.svg | 14 + static/icons/arrow-down.svg | 14 + static/icons/arrow-left-circle.svg | 15 + static/icons/arrow-left-right.svg | 16 + static/icons/arrow-left.svg | 14 + static/icons/arrow-right-circle.svg | 15 + static/icons/arrow-right.svg | 14 + static/icons/arrow-up-circle.svg | 15 + static/icons/arrow-up-down.svg | 16 + static/icons/arrow-up-left.svg | 14 + static/icons/arrow-up-right.svg | 14 + static/icons/arrow-up.svg | 14 + static/icons/asterisk.svg | 15 + static/icons/at-sign.svg | 14 + static/icons/award.svg | 14 + static/icons/axe.svg | 14 + static/icons/axis-3d.svg | 14 + static/icons/baby.svg | 16 + static/icons/backpack.svg | 17 + static/icons/baggage-claim.svg | 17 + static/icons/banana.svg | 14 + static/icons/banknote.svg | 15 + static/icons/bar-chart-2.svg | 15 + static/icons/bar-chart-3.svg | 16 + static/icons/bar-chart-4.svg | 16 + static/icons/bar-chart-horizontal.svg | 16 + static/icons/bar-chart.svg | 15 + static/icons/baseline.svg | 15 + static/icons/bath.svg | 17 + static/icons/battery-charging.svg | 16 + static/icons/battery-full.svg | 17 + static/icons/battery-low.svg | 15 + static/icons/battery-medium.svg | 16 + static/icons/battery.svg | 14 + static/icons/beaker.svg | 15 + static/icons/bean-off.svg | 16 + static/icons/bean.svg | 14 + static/icons/bed-double.svg | 16 + static/icons/bed-single.svg | 15 + static/icons/bed.svg | 16 + static/icons/beer.svg | 17 + static/icons/bell-minus.svg | 15 + static/icons/bell-off.svg | 17 + static/icons/bell-plus.svg | 16 + static/icons/bell-ring.svg | 16 + static/icons/bell.svg | 14 + static/icons/bike.svg | 15 + static/icons/binary.svg | 18 + static/icons/bitcoin.svg | 13 + static/icons/bluetooth-connected.svg | 15 + static/icons/bluetooth-off.svg | 15 + static/icons/bluetooth-searching.svg | 15 + static/icons/bluetooth.svg | 13 + static/icons/bold.svg | 14 + static/icons/bomb.svg | 15 + static/icons/bone.svg | 13 + static/icons/book-open-check.svg | 15 + static/icons/book-open.svg | 14 + static/icons/book.svg | 14 + static/icons/bookmark-minus.svg | 14 + static/icons/bookmark-plus.svg | 15 + static/icons/bookmark.svg | 13 + static/icons/bot.svg | 17 + static/icons/box-select.svg | 24 + static/icons/box.svg | 15 + static/icons/boxes.svg | 24 + static/icons/briefcase.svg | 14 + static/icons/brush.svg | 14 + static/icons/bug.svg | 21 + static/icons/building-2.svg | 19 + static/icons/building.svg | 23 + static/icons/bus.svg | 16 + static/icons/cake.svg | 21 + static/icons/calculator.svg | 22 + static/icons/calendar-check-2.svg | 17 + static/icons/calendar-check.svg | 17 + static/icons/calendar-clock.svg | 18 + static/icons/calendar-days.svg | 22 + static/icons/calendar-heart.svg | 17 + static/icons/calendar-minus.svg | 17 + static/icons/calendar-off.svg | 18 + static/icons/calendar-plus.svg | 18 + static/icons/calendar-range.svg | 20 + static/icons/calendar-search.svg | 18 + static/icons/calendar-x-2.svg | 18 + static/icons/calendar-x.svg | 18 + static/icons/calendar.svg | 16 + static/icons/camera-off.svg | 16 + static/icons/camera.svg | 14 + static/icons/candy-off.svg | 20 + static/icons/candy.svg | 17 + static/icons/car.svg | 15 + static/icons/carrot.svg | 15 + static/icons/cast.svg | 16 + static/icons/cat.svg | 18 + static/icons/check-check.svg | 14 + static/icons/check-circle-2.svg | 14 + static/icons/check-circle.svg | 14 + static/icons/check-square.svg | 14 + static/icons/check.svg | 13 + static/icons/chef-hat.svg | 14 + static/icons/cherry.svg | 16 + static/icons/chevron-down.svg | 13 + static/icons/chevron-first.svg | 14 + static/icons/chevron-last.svg | 14 + static/icons/chevron-left.svg | 13 + static/icons/chevron-right.svg | 13 + static/icons/chevron-up.svg | 13 + static/icons/chevrons-down-up.svg | 14 + static/icons/chevrons-down.svg | 14 + static/icons/chevrons-left-right.svg | 14 + static/icons/chevrons-left.svg | 14 + static/icons/chevrons-right-left.svg | 14 + static/icons/chevrons-right.svg | 14 + static/icons/chevrons-up-down.svg | 14 + static/icons/chevrons-up.svg | 14 + static/icons/chrome.svg | 17 + static/icons/cigarette-off.svg | 19 + static/icons/cigarette.svg | 17 + static/icons/circle-dot.svg | 14 + static/icons/circle-ellipsis.svg | 16 + static/icons/circle-slashed.svg | 14 + static/icons/circle.svg | 13 + static/icons/citrus.svg | 17 + static/icons/clapperboard.svg | 16 + static/icons/clipboard-check.svg | 15 + static/icons/clipboard-copy.svg | 17 + static/icons/clipboard-edit.svg | 16 + static/icons/clipboard-list.svg | 18 + static/icons/clipboard-signature.svg | 17 + static/icons/clipboard-type.svg | 17 + static/icons/clipboard-x.svg | 16 + static/icons/clipboard.svg | 14 + static/icons/clock-1.svg | 14 + static/icons/clock-10.svg | 14 + static/icons/clock-11.svg | 14 + static/icons/clock-12.svg | 14 + static/icons/clock-2.svg | 14 + static/icons/clock-3.svg | 14 + static/icons/clock-4.svg | 14 + static/icons/clock-5.svg | 14 + static/icons/clock-6.svg | 14 + static/icons/clock-7.svg | 14 + static/icons/clock-8.svg | 14 + static/icons/clock-9.svg | 14 + static/icons/clock.svg | 14 + static/icons/cloud-cog.svg | 22 + static/icons/cloud-drizzle.svg | 19 + static/icons/cloud-fog.svg | 15 + static/icons/cloud-hail.svg | 19 + static/icons/cloud-lightning.svg | 14 + static/icons/cloud-moon-rain.svg | 16 + static/icons/cloud-moon.svg | 14 + static/icons/cloud-off.svg | 15 + static/icons/cloud-rain-wind.svg | 16 + static/icons/cloud-rain.svg | 16 + static/icons/cloud-snow.svg | 19 + static/icons/cloud-sun-rain.svg | 20 + static/icons/cloud-sun.svg | 18 + static/icons/cloud.svg | 13 + static/icons/cloudy.svg | 14 + static/icons/clover.svg | 17 + static/icons/code-2.svg | 15 + static/icons/code.svg | 14 + static/icons/codepen.svg | 17 + static/icons/codesandbox.svg | 18 + static/icons/coffee.svg | 17 + static/icons/cog.svg | 26 + static/icons/coins.svg | 16 + static/icons/columns.svg | 14 + static/icons/command.svg | 13 + static/icons/compass.svg | 14 + static/icons/component.svg | 16 + static/icons/concierge-bell.svg | 16 + static/icons/contact.svg | 17 + static/icons/contrast.svg | 14 + static/icons/cookie.svg | 18 + static/icons/copy.svg | 14 + static/icons/copyleft.svg | 14 + static/icons/copyright.svg | 14 + static/icons/corner-down-left.svg | 14 + static/icons/corner-down-right.svg | 14 + static/icons/corner-left-down.svg | 14 + static/icons/corner-left-up.svg | 14 + static/icons/corner-right-down.svg | 14 + static/icons/corner-right-up.svg | 14 + static/icons/corner-up-left.svg | 14 + static/icons/corner-up-right.svg | 14 + static/icons/cpu.svg | 22 + static/icons/credit-card.svg | 14 + static/icons/croissant.svg | 17 + static/icons/crop.svg | 14 + static/icons/cross.svg | 13 + static/icons/crosshair.svg | 17 + static/icons/crown.svg | 13 + static/icons/cup-soda.svg | 16 + static/icons/curly-braces.svg | 14 + static/icons/currency.svg | 17 + static/icons/database.svg | 15 + static/icons/delete.svg | 15 + static/icons/diamond.svg | 20 + static/icons/dice-1.svg | 14 + static/icons/dice-2.svg | 15 + static/icons/dice-3.svg | 16 + static/icons/dice-4.svg | 17 + static/icons/dice-5.svg | 18 + static/icons/dice-6.svg | 19 + static/icons/dices.svg | 18 + static/icons/diff.svg | 15 + static/icons/disc.svg | 14 + static/icons/divide-circle.svg | 16 + static/icons/divide-square.svg | 16 + static/icons/divide.svg | 15 + static/icons/dna-off.svg | 23 + static/icons/dna.svg | 23 + static/icons/dog.svg | 18 + static/icons/dollar-sign.svg | 14 + static/icons/download-cloud.svg | 15 + static/icons/download.svg | 15 + static/icons/dribbble.svg | 16 + static/icons/droplet.svg | 13 + static/icons/droplets.svg | 14 + static/icons/drumstick.svg | 14 + static/icons/dumbbell.svg | 19 + static/icons/ear-off.svg | 17 + static/icons/ear.svg | 14 + static/icons/edit-2.svg | 13 + static/icons/edit-3.svg | 14 + static/icons/edit.svg | 14 + static/icons/egg-fried.svg | 14 + static/icons/egg-off.svg | 15 + static/icons/egg.svg | 13 + static/icons/equal-not.svg | 15 + static/icons/equal.svg | 14 + static/icons/eraser.svg | 15 + static/icons/euro.svg | 15 + static/icons/expand.svg | 16 + static/icons/external-link.svg | 15 + static/icons/eye-off.svg | 16 + static/icons/eye.svg | 14 + static/icons/facebook.svg | 13 + static/icons/factory.svg | 16 + static/icons/fan.svg | 14 + static/icons/fast-forward.svg | 14 + static/icons/feather.svg | 15 + static/icons/figma.svg | 17 + static/icons/file-archive.svg | 18 + static/icons/file-audio-2.svg | 17 + static/icons/file-audio.svg | 17 + static/icons/file-axis-3d.svg | 16 + static/icons/file-badge-2.svg | 15 + static/icons/file-badge.svg | 16 + static/icons/file-bar-chart-2.svg | 17 + static/icons/file-bar-chart.svg | 17 + static/icons/file-box.svg | 18 + static/icons/file-check-2.svg | 15 + static/icons/file-check.svg | 15 + static/icons/file-clock.svg | 16 + static/icons/file-code.svg | 16 + static/icons/file-cog-2.svg | 21 + static/icons/file-cog.svg | 23 + static/icons/file-diff.svg | 16 + static/icons/file-digit.svg | 17 + static/icons/file-down.svg | 16 + static/icons/file-edit.svg | 15 + static/icons/file-heart.svg | 15 + static/icons/file-image.svg | 16 + static/icons/file-input.svg | 16 + static/icons/file-json-2.svg | 16 + static/icons/file-json.svg | 16 + static/icons/file-key-2.svg | 17 + static/icons/file-key.svg | 16 + static/icons/file-line-chart.svg | 15 + static/icons/file-lock-2.svg | 16 + static/icons/file-lock.svg | 15 + static/icons/file-minus-2.svg | 15 + static/icons/file-minus.svg | 15 + static/icons/file-output.svg | 16 + static/icons/file-pie-chart.svg | 16 + static/icons/file-plus-2.svg | 16 + static/icons/file-plus.svg | 16 + static/icons/file-question.svg | 15 + static/icons/file-scan.svg | 18 + static/icons/file-search-2.svg | 16 + static/icons/file-search.svg | 16 + static/icons/file-signature.svg | 15 + static/icons/file-spreadsheet.svg | 18 + static/icons/file-symlink.svg | 16 + static/icons/file-terminal.svg | 16 + static/icons/file-text.svg | 17 + static/icons/file-type-2.svg | 17 + static/icons/file-type.svg | 17 + static/icons/file-up.svg | 16 + static/icons/file-video-2.svg | 16 + static/icons/file-video.svg | 15 + static/icons/file-volume-2.svg | 17 + static/icons/file-volume.svg | 16 + static/icons/file-warning.svg | 15 + static/icons/file-x-2.svg | 16 + static/icons/file-x.svg | 16 + static/icons/file.svg | 14 + static/icons/files.svg | 15 + static/icons/film.svg | 20 + static/icons/filter.svg | 13 + static/icons/fingerprint.svg | 21 + static/icons/flag-off.svg | 16 + static/icons/flag-triangle-left.svg | 13 + static/icons/flag-triangle-right.svg | 13 + static/icons/flag.svg | 14 + static/icons/flame.svg | 13 + static/icons/flashlight-off.svg | 16 + static/icons/flashlight.svg | 15 + static/icons/flask-conical-off.svg | 18 + static/icons/flask-conical.svg | 15 + static/icons/flask-round.svg | 17 + static/icons/flip-horizontal-2.svg | 18 + static/icons/flip-horizontal.svg | 18 + static/icons/flip-vertical-2.svg | 18 + static/icons/flip-vertical.svg | 18 + static/icons/flower-2.svg | 17 + static/icons/flower.svg | 18 + static/icons/focus.svg | 17 + static/icons/folder-archive.svg | 16 + static/icons/folder-check.svg | 14 + static/icons/folder-clock.svg | 15 + static/icons/folder-closed.svg | 14 + static/icons/folder-cog-2.svg | 20 + static/icons/folder-cog.svg | 22 + static/icons/folder-down.svg | 15 + static/icons/folder-edit.svg | 14 + static/icons/folder-heart.svg | 14 + static/icons/folder-input.svg | 15 + static/icons/folder-key.svg | 16 + static/icons/folder-lock.svg | 15 + static/icons/folder-minus.svg | 14 + static/icons/folder-open.svg | 13 + static/icons/folder-output.svg | 15 + static/icons/folder-plus.svg | 15 + static/icons/folder-search-2.svg | 15 + static/icons/folder-search.svg | 15 + static/icons/folder-symlink.svg | 15 + static/icons/folder-tree.svg | 16 + static/icons/folder-up.svg | 15 + static/icons/folder-x.svg | 15 + static/icons/folder.svg | 13 + static/icons/folders.svg | 14 + static/icons/form-input.svg | 16 + static/icons/forward.svg | 14 + static/icons/frame.svg | 16 + static/icons/framer.svg | 13 + static/icons/frown.svg | 16 + static/icons/fuel.svg | 16 + static/icons/function-square.svg | 15 + static/icons/gamepad-2.svg | 17 + static/icons/gamepad.svg | 17 + static/icons/gauge.svg | 14 + static/icons/gavel.svg | 17 + static/icons/gem.svg | 16 + static/icons/ghost.svg | 15 + static/icons/gift.svg | 17 + static/icons/git-branch-plus.svg | 18 + static/icons/git-branch.svg | 16 + static/icons/git-commit.svg | 15 + static/icons/git-compare.svg | 16 + static/icons/git-fork.svg | 17 + static/icons/git-merge.svg | 15 + static/icons/git-pull-request-closed.svg | 18 + static/icons/git-pull-request-draft.svg | 17 + static/icons/git-pull-request.svg | 16 + static/icons/github.svg | 14 + static/icons/gitlab.svg | 13 + static/icons/glass-water.svg | 14 + static/icons/glasses.svg | 17 + static/icons/globe-2.svg | 16 + static/icons/globe.svg | 15 + static/icons/grab.svg | 17 + static/icons/graduation-cap.svg | 14 + static/icons/grape.svg | 21 + static/icons/grid.svg | 17 + static/icons/grip-horizontal.svg | 18 + static/icons/grip-vertical.svg | 18 + static/icons/hammer.svg | 15 + static/icons/hand-metal.svg | 16 + static/icons/hand.svg | 16 + static/icons/hard-drive.svg | 16 + static/icons/hard-hat.svg | 16 + static/icons/hash.svg | 16 + static/icons/haze.svg | 20 + static/icons/heading-1.svg | 16 + static/icons/heading-2.svg | 16 + static/icons/heading-3.svg | 17 + static/icons/heading-4.svg | 17 + static/icons/heading-5.svg | 17 + static/icons/heading-6.svg | 17 + static/icons/heading.svg | 15 + static/icons/headphones.svg | 14 + static/icons/heart-crack.svg | 14 + static/icons/heart-handshake.svg | 16 + static/icons/heart-off.svg | 15 + static/icons/heart-pulse.svg | 14 + static/icons/heart.svg | 13 + static/icons/help-circle.svg | 15 + static/icons/hexagon.svg | 13 + static/icons/highlighter.svg | 14 + static/icons/history.svg | 15 + static/icons/home.svg | 14 + static/icons/hop-off.svg | 20 + static/icons/hop.svg | 20 + static/icons/hourglass.svg | 16 + static/icons/ice-cream.svg | 15 + static/icons/image-minus.svg | 16 + static/icons/image-off.svg | 18 + static/icons/image-plus.svg | 17 + static/icons/image.svg | 15 + static/icons/import.svg | 15 + static/icons/inbox.svg | 14 + static/icons/indent.svg | 16 + static/icons/indian-rupee.svg | 17 + static/icons/infinity.svg | 13 + static/icons/info.svg | 15 + static/icons/inspect.svg | 14 + static/icons/instagram.svg | 15 + static/icons/italic.svg | 15 + static/icons/japanese-yen.svg | 15 + static/icons/joystick.svg | 16 + static/icons/key.svg | 13 + static/icons/keyboard.svg | 21 + static/icons/lamp-ceiling.svg | 15 + static/icons/lamp-desk.svg | 16 + static/icons/lamp-floor.svg | 15 + static/icons/lamp-wall-down.svg | 15 + static/icons/lamp-wall-up.svg | 15 + static/icons/lamp.svg | 15 + static/icons/landmark.svg | 18 + static/icons/languages.svg | 18 + static/icons/laptop-2.svg | 14 + static/icons/laptop.svg | 13 + static/icons/lasso-select.svg | 17 + static/icons/lasso.svg | 15 + static/icons/laugh.svg | 16 + static/icons/layers.svg | 15 + static/icons/layout-dashboard.svg | 16 + static/icons/layout-grid.svg | 16 + static/icons/layout-list.svg | 18 + static/icons/layout-template.svg | 15 + static/icons/layout.svg | 15 + static/icons/leaf.svg | 14 + static/icons/library.svg | 16 + static/icons/life-buoy.svg | 19 + static/icons/lightbulb-off.svg | 17 + static/icons/lightbulb.svg | 15 + static/icons/line-chart.svg | 14 + static/icons/link-2-off.svg | 16 + static/icons/link-2.svg | 15 + static/icons/link.svg | 14 + static/icons/linkedin.svg | 15 + static/icons/list-checks.svg | 18 + static/icons/list-end.svg | 17 + static/icons/list-minus.svg | 16 + static/icons/list-music.svg | 17 + static/icons/list-ordered.svg | 18 + static/icons/list-plus.svg | 17 + static/icons/list-start.svg | 17 + static/icons/list-video.svg | 16 + static/icons/list-x.svg | 17 + static/icons/list.svg | 18 + static/icons/loader-2.svg | 13 + static/icons/loader.svg | 20 + static/icons/locate-fixed.svg | 18 + static/icons/locate-off.svg | 19 + static/icons/locate.svg | 17 + static/icons/lock.svg | 14 + static/icons/log-in.svg | 15 + static/icons/log-out.svg | 15 + static/icons/luggage.svg | 17 + static/icons/magnet.svg | 15 + static/icons/mail-check.svg | 15 + static/icons/mail-minus.svg | 15 + static/icons/mail-open.svg | 14 + static/icons/mail-plus.svg | 16 + static/icons/mail-question.svg | 16 + static/icons/mail-search.svg | 17 + static/icons/mail-warning.svg | 16 + static/icons/mail-x.svg | 16 + static/icons/mail.svg | 14 + static/icons/mails.svg | 15 + static/icons/map-pin-off.svg | 17 + static/icons/map-pin.svg | 14 + static/icons/map.svg | 15 + static/icons/martini.svg | 15 + static/icons/maximize-2.svg | 16 + static/icons/maximize.svg | 16 + static/icons/medal.svg | 18 + static/icons/megaphone-off.svg | 16 + static/icons/megaphone.svg | 14 + static/icons/meh.svg | 16 + static/icons/menu.svg | 15 + static/icons/message-circle.svg | 13 + static/icons/message-square.svg | 13 + static/icons/mic-2.svg | 14 + static/icons/mic-off.svg | 18 + static/icons/mic.svg | 15 + static/icons/microscope.svg | 18 + static/icons/microwave.svg | 17 + static/icons/milestone.svg | 15 + static/icons/milk-off.svg | 16 + static/icons/milk.svg | 15 + static/icons/minimize-2.svg | 16 + static/icons/minimize.svg | 16 + static/icons/minus-circle.svg | 14 + static/icons/minus-square.svg | 14 + static/icons/minus.svg | 13 + static/icons/monitor-off.svg | 17 + static/icons/monitor-smartphone.svg | 16 + static/icons/monitor-speaker.svg | 17 + static/icons/monitor.svg | 15 + static/icons/moon.svg | 13 + static/icons/more-horizontal.svg | 15 + static/icons/more-vertical.svg | 15 + static/icons/mountain-snow.svg | 14 + static/icons/mountain.svg | 13 + static/icons/mouse-pointer-2.svg | 13 + static/icons/mouse-pointer-click.svg | 15 + static/icons/mouse-pointer.svg | 14 + static/icons/mouse.svg | 14 + static/icons/move-3d.svg | 16 + static/icons/move-diagonal-2.svg | 15 + static/icons/move-diagonal.svg | 15 + static/icons/move-horizontal.svg | 15 + static/icons/move-vertical.svg | 15 + static/icons/move.svg | 18 + static/icons/music-2.svg | 14 + static/icons/music-3.svg | 14 + static/icons/music-4.svg | 16 + static/icons/music.svg | 15 + static/icons/navigation-2-off.svg | 15 + static/icons/navigation-2.svg | 13 + static/icons/navigation-off.svg | 15 + static/icons/navigation.svg | 13 + static/icons/network.svg | 17 + static/icons/newspaper.svg | 16 + static/icons/nut-off.svg | 17 + static/icons/nut.svg | 15 + static/icons/octagon.svg | 13 + static/icons/option.svg | 14 + static/icons/outdent.svg | 16 + static/icons/package-2.svg | 15 + static/icons/package-check.svg | 17 + static/icons/package-minus.svg | 17 + static/icons/package-open.svg | 16 + static/icons/package-plus.svg | 18 + static/icons/package-search.svg | 18 + static/icons/package-x.svg | 17 + static/icons/package.svg | 16 + static/icons/paint-bucket.svg | 16 + static/icons/paintbrush-2.svg | 16 + static/icons/paintbrush.svg | 15 + static/icons/palette.svg | 17 + static/icons/palmtree.svg | 16 + static/icons/paperclip.svg | 13 + static/icons/party-popper.svg | 21 + static/icons/pause-circle.svg | 15 + static/icons/pause-octagon.svg | 15 + static/icons/pause.svg | 14 + static/icons/pen-tool.svg | 16 + static/icons/pencil.svg | 14 + static/icons/percent.svg | 15 + static/icons/person-standing.svg | 16 + static/icons/phone-call.svg | 15 + static/icons/phone-forwarded.svg | 15 + static/icons/phone-incoming.svg | 15 + static/icons/phone-missed.svg | 15 + static/icons/phone-off.svg | 14 + static/icons/phone-outgoing.svg | 15 + static/icons/phone.svg | 13 + static/icons/pie-chart.svg | 14 + static/icons/piggy-bank.svg | 15 + static/icons/pin-off.svg | 16 + static/icons/pin.svg | 14 + static/icons/pipette.svg | 15 + static/icons/pizza.svg | 17 + static/icons/plane.svg | 13 + static/icons/play-circle.svg | 14 + static/icons/play.svg | 13 + static/icons/plug-2.svg | 17 + static/icons/plug-zap.svg | 18 + static/icons/plug.svg | 16 + static/icons/plus-circle.svg | 15 + static/icons/plus-square.svg | 15 + static/icons/plus.svg | 14 + static/icons/pocket.svg | 14 + static/icons/podcast.svg | 16 + static/icons/pointer.svg | 17 + static/icons/pound-sterling.svg | 16 + static/icons/power-off.svg | 16 + static/icons/power.svg | 14 + static/icons/printer.svg | 15 + static/icons/puzzle.svg | 13 + static/icons/qr-code.svg | 24 + static/icons/quote.svg | 14 + static/icons/radio-receiver.svg | 16 + static/icons/radio.svg | 17 + static/icons/rectangle-horizontal.svg | 13 + static/icons/rectangle-vertical.svg | 13 + static/icons/recycle.svg | 18 + static/icons/redo-2.svg | 14 + static/icons/redo.svg | 14 + static/icons/refresh-ccw.svg | 16 + static/icons/refresh-cw.svg | 16 + static/icons/refrigerator.svg | 15 + static/icons/regex.svg | 16 + static/icons/repeat-1.svg | 17 + static/icons/repeat.svg | 16 + static/icons/reply-all.svg | 15 + static/icons/reply.svg | 14 + static/icons/rewind.svg | 14 + static/icons/rocket.svg | 16 + static/icons/rocking-chair.svg | 16 + static/icons/rotate-3d.svg | 15 + static/icons/rotate-ccw.svg | 14 + static/icons/rotate-cw.svg | 14 + static/icons/rss.svg | 15 + static/icons/ruler.svg | 17 + static/icons/russian-ruble.svg | 17 + static/icons/sailboat.svg | 15 + static/icons/save.svg | 15 + static/icons/scale-3d.svg | 16 + static/icons/scale.svg | 17 + static/icons/scaling.svg | 16 + static/icons/scan-face.svg | 19 + static/icons/scan-line.svg | 17 + static/icons/scan.svg | 16 + static/icons/scissors.svg | 17 + static/icons/screen-share-off.svg | 17 + static/icons/screen-share.svg | 17 + static/icons/scroll.svg | 16 + static/icons/search.svg | 14 + static/icons/send.svg | 14 + static/icons/separator-horizontal.svg | 15 + static/icons/separator-vertical.svg | 15 + static/icons/server-cog.svg | 25 + static/icons/server-crash.svg | 17 + static/icons/server-off.svg | 18 + static/icons/server.svg | 16 + static/icons/settings-2.svg | 16 + static/icons/settings.svg | 14 + static/icons/share-2.svg | 17 + static/icons/share.svg | 15 + static/icons/sheet.svg | 17 + static/icons/shield-alert.svg | 15 + static/icons/shield-check.svg | 14 + static/icons/shield-close.svg | 15 + static/icons/shield-off.svg | 15 + static/icons/shield.svg | 13 + static/icons/shirt.svg | 13 + static/icons/shopping-bag.svg | 15 + static/icons/shopping-cart.svg | 15 + static/icons/shovel.svg | 15 + static/icons/shower-head.svg | 22 + static/icons/shrink.svg | 16 + static/icons/shrub.svg | 15 + static/icons/shuffle.svg | 17 + static/icons/sidebar-close.svg | 15 + static/icons/sidebar-open.svg | 15 + static/icons/sidebar.svg | 14 + static/icons/sigma.svg | 13 + static/icons/signal-high.svg | 16 + static/icons/signal-low.svg | 14 + static/icons/signal-medium.svg | 15 + static/icons/signal-zero.svg | 13 + static/icons/signal.svg | 17 + static/icons/siren.svg | 20 + static/icons/skip-back.svg | 14 + static/icons/skip-forward.svg | 14 + static/icons/skull.svg | 17 + static/icons/slack.svg | 20 + static/icons/slash.svg | 14 + static/icons/slice.svg | 14 + static/icons/sliders-horizontal.svg | 21 + static/icons/sliders.svg | 21 + static/icons/smartphone-charging.svg | 14 + static/icons/smartphone.svg | 14 + static/icons/smile-plus.svg | 18 + static/icons/smile.svg | 16 + static/icons/snowflake.svg | 18 + static/icons/sofa.svg | 17 + static/icons/sort-asc.svg | 17 + static/icons/sort-desc.svg | 17 + static/icons/speaker.svg | 15 + static/icons/spline.svg | 15 + static/icons/sprout.svg | 16 + static/icons/square.svg | 13 + static/icons/star-half.svg | 13 + static/icons/star-off.svg | 15 + static/icons/star.svg | 13 + static/icons/stethoscope.svg | 15 + static/icons/sticker.svg | 17 + static/icons/sticky-note.svg | 14 + static/icons/stop-circle.svg | 14 + static/icons/stretch-horizontal.svg | 14 + static/icons/stretch-vertical.svg | 14 + static/icons/strikethrough.svg | 15 + static/icons/subscript.svg | 15 + static/icons/sun-dim.svg | 21 + static/icons/sun-medium.svg | 21 + static/icons/sun-moon.svg | 22 + static/icons/sun-snow.svg | 23 + static/icons/sun.svg | 21 + static/icons/sunrise.svg | 20 + static/icons/sunset.svg | 20 + static/icons/superscript.svg | 15 + static/icons/swiss-franc.svg | 15 + static/icons/switch-camera.svg | 17 + static/icons/sword.svg | 16 + static/icons/swords.svg | 20 + static/icons/syringe.svg | 18 + static/icons/table-2.svg | 13 + static/icons/table.svg | 16 + static/icons/tablet.svg | 14 + static/icons/tag.svg | 14 + static/icons/tags.svg | 15 + static/icons/target.svg | 15 + static/icons/tent.svg | 17 + static/icons/terminal-square.svg | 15 + static/icons/terminal.svg | 14 + static/icons/text-cursor-input.svg | 16 + static/icons/text-cursor.svg | 15 + static/icons/thermometer-snowflake.svg | 18 + static/icons/thermometer-sun.svg | 18 + static/icons/thermometer.svg | 13 + static/icons/thumbs-down.svg | 14 + static/icons/thumbs-up.svg | 14 + static/icons/ticket.svg | 16 + static/icons/timer-off.svg | 17 + static/icons/timer-reset.svg | 16 + static/icons/timer.svg | 15 + static/icons/toggle-left.svg | 14 + static/icons/toggle-right.svg | 14 + static/icons/tornado.svg | 17 + static/icons/toy-brick.svg | 15 + static/icons/train.svg | 19 + static/icons/trash-2.svg | 17 + static/icons/trash.svg | 15 + static/icons/tree-deciduous.svg | 14 + static/icons/tree-pine.svg | 14 + static/icons/trees.svg | 16 + static/icons/trello.svg | 15 + static/icons/trending-down.svg | 14 + static/icons/trending-up.svg | 14 + static/icons/triangle.svg | 13 + static/icons/trophy.svg | 18 + static/icons/truck.svg | 17 + static/icons/tv-2.svg | 14 + static/icons/tv.svg | 14 + static/icons/twitch.svg | 13 + static/icons/twitter.svg | 13 + static/icons/type.svg | 15 + static/icons/umbrella.svg | 15 + static/icons/underline.svg | 14 + static/icons/undo-2.svg | 14 + static/icons/undo.svg | 14 + static/icons/unlink-2.svg | 13 + static/icons/unlink.svg | 18 + static/icons/unlock.svg | 14 + static/icons/upload-cloud.svg | 15 + static/icons/upload.svg | 15 + static/icons/usb.svg | 19 + static/icons/user-check.svg | 15 + static/icons/user-cog.svg | 21 + static/icons/user-minus.svg | 15 + static/icons/user-plus.svg | 16 + static/icons/user-x.svg | 16 + static/icons/user.svg | 14 + static/icons/users.svg | 16 + static/icons/utensils-crossed.svg | 16 + static/icons/utensils.svg | 15 + static/icons/vegan.svg | 15 + static/icons/venetian-mask.svg | 15 + static/icons/verified.svg | 14 + static/icons/vibrate-off.svg | 17 + static/icons/vibrate.svg | 15 + static/icons/video-off.svg | 15 + static/icons/video.svg | 14 + static/icons/view.svg | 16 + static/icons/voicemail.svg | 15 + static/icons/volume-1.svg | 14 + static/icons/volume-2.svg | 15 + static/icons/volume-x.svg | 15 + static/icons/volume.svg | 13 + static/icons/wallet.svg | 15 + static/icons/wand-2.svg | 20 + static/icons/wand.svg | 21 + static/icons/watch.svg | 16 + static/icons/waves.svg | 15 + static/icons/webcam.svg | 16 + static/icons/webhook.svg | 15 + static/icons/wheat-off.svg | 22 + static/icons/wheat.svg | 20 + static/icons/wifi-off.svg | 19 + static/icons/wifi.svg | 16 + static/icons/wind.svg | 15 + static/icons/wine-off.svg | 17 + static/icons/wine.svg | 16 + static/icons/wrap-text.svg | 16 + static/icons/wrench.svg | 13 + static/icons/x-circle.svg | 15 + static/icons/x-octagon.svg | 15 + static/icons/x-square.svg | 15 + static/icons/x.svg | 14 + static/icons/youtube.svg | 14 + static/icons/zap-off.svg | 16 + static/icons/zap.svg | 13 + static/icons/zoom-in.svg | 16 + static/icons/zoom-out.svg | 15 + static/images/Bitcoin_logo.svg | 1 + static/images/PayPal.svg | 1 + static/images/header.svg | 8 + static/images/payment_background.jpg | Bin 0 -> 78161 bytes static/images/zed.png | Bin 0 -> 5666 bytes static/js/chart.min.js | 13 + static/js/chartjs-plugin-annotation.esm.js | 2092 ++ static/js/chartjs-plugin-annotation.js | 2099 ++ static/js/chartjs-plugin-annotation.min.js | 7 + static/js/hls.js | 2 + static/js/hls.min.js.map | 1 + static/js/prism.cjs | 2359 ++ static/js/socket.io.min.js | 7 + static/js/socket.io.min.js.map | 1 + static/js/webtorrent.js | 16 + static/js/ztext.min.js | 6 + static/logo-40.png | Bin 0 -> 2502 bytes static/logo-small.svg | 10 + static/logo.png | Bin 0 -> 1171 bytes static/logo.svg | 44 + static/monochrome.css | 149 + static/mstile-150x150.png | Bin 0 -> 1149 bytes static/prod_icons.json | 74 + static/safari-pinned-tab.svg | 90 + static/service-worker.js | 0 static/site.webmanifest | 19 + static/test.js | 5 + static/test.md | 16 + static/tos.json | 58 + tests/cards.json | 16 + tests/client/assert.js | 16 + tests/client/fsm.js | 59 + tests/client/helpers.js | 48 + tests/lib/ormish.js | 144 + tests/models/media.js | 43 + tests/models/payment.js | 56 + tests/models/site.js | 68 + tests/models/user.js | 54 + tests/models/user_payment.js | 57 + tests/ui/admin_email.js | 53 + tests/ui/admin_tables.js | 67 + tests/ui/demos.js | 85 + tests/ui/livestream.js | 54 + tests/ui/login.js | 80 + tests/ui/password_reset.js | 51 + tests/ui/payments.js | 27 + tests/ui/register.js | 89 + tests/ui/unsubscribe.js | 33 + tests/ui/user_profile.js | 51 + 1302 files changed, 78519 insertions(+), 2 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 admin/App.svelte create mode 100644 admin/Header.svelte create mode 100644 admin/Layout.svelte create mode 100644 admin/bando/Bandolier.svelte create mode 100644 admin/bando/Components.svelte create mode 100644 admin/bando/Djenterator.svelte create mode 100644 admin/bando/IconFinder.svelte create mode 100644 admin/bando/demos/Accordion.svelte create mode 100644 admin/bando/demos/Accordion.svelte.md create mode 100644 admin/bando/demos/AspectRatio.svelte create mode 100644 admin/bando/demos/AspectRatio.svelte.md create mode 100644 admin/bando/demos/Badge.svelte create mode 100644 admin/bando/demos/Badge.svelte.md create mode 100644 admin/bando/demos/ButtonGroup.svelte create mode 100644 admin/bando/demos/ButtonGroup.svelte.md create mode 100644 admin/bando/demos/Calendar.svelte create mode 100644 admin/bando/demos/Calendar.svelte.md create mode 100644 admin/bando/demos/Callout.svelte create mode 100644 admin/bando/demos/Callout.svelte.md create mode 100644 admin/bando/demos/Cards.svelte create mode 100644 admin/bando/demos/Cards.svelte.md create mode 100644 admin/bando/demos/Carousel.svelte create mode 100644 admin/bando/demos/Carousel.svelte.md create mode 100644 admin/bando/demos/Chat.svelte create mode 100644 admin/bando/demos/Chat.svelte.md create mode 100644 admin/bando/demos/Code.svelte create mode 100644 admin/bando/demos/Code.svelte.md create mode 100644 admin/bando/demos/Countdown.svelte create mode 100644 admin/bando/demos/Countdown.svelte.md create mode 100644 admin/bando/demos/Darkmode.svelte create mode 100644 admin/bando/demos/Darkmode.svelte.md create mode 100644 admin/bando/demos/DataTable.svelte create mode 100644 admin/bando/demos/DataTable.svelte.md create mode 100644 admin/bando/demos/FairPay.svelte create mode 100644 admin/bando/demos/FairPay.svelte.md create mode 100644 admin/bando/demos/Flipper.svelte create mode 100644 admin/bando/demos/Flipper.svelte.md create mode 100644 admin/bando/demos/Form.svelte create mode 100644 admin/bando/demos/Form.svelte.md create mode 100644 admin/bando/demos/HLSVideo.svelte create mode 100644 admin/bando/demos/Icon.svelte create mode 100644 admin/bando/demos/Icon.svelte.md create mode 100644 admin/bando/demos/IconImage.svelte create mode 100644 admin/bando/demos/LiveStream.svelte create mode 100644 admin/bando/demos/LiveStream.svelte.md create mode 100644 admin/bando/demos/LoggedIn.svelte create mode 100644 admin/bando/demos/LoggedIn.svelte.md create mode 100644 admin/bando/demos/Login.svelte create mode 100644 admin/bando/demos/Login.svelte.md create mode 100644 admin/bando/demos/Markdown.svelte create mode 100644 admin/bando/demos/Modal.svelte create mode 100644 admin/bando/demos/Modal.svelte.md create mode 100644 admin/bando/demos/OGPreview.svelte create mode 100644 admin/bando/demos/OGPreview.svelte.md create mode 100644 admin/bando/demos/Pagination.svelte create mode 100644 admin/bando/demos/Pagination.svelte.md create mode 100644 admin/bando/demos/Panels.svelte create mode 100644 admin/bando/demos/PlaceHolder.svelte create mode 100644 admin/bando/demos/PlaceHolder.svelte.md create mode 100644 admin/bando/demos/Progress.svelte create mode 100644 admin/bando/demos/Progress.svelte.md create mode 100644 admin/bando/demos/Sidebar.svelte create mode 100644 admin/bando/demos/Sidebar.svelte.md create mode 100644 admin/bando/demos/SidebarCSS.svelte create mode 100644 admin/bando/demos/SidebarCSS.svelte.md create mode 100644 admin/bando/demos/SnapImage.svelte create mode 100644 admin/bando/demos/SnapImage.svelte.md create mode 100644 admin/bando/demos/Spinner.svelte create mode 100644 admin/bando/demos/Spinner.svelte.md create mode 100644 admin/bando/demos/StackLayer.svelte create mode 100644 admin/bando/demos/StackLayer.svelte.md create mode 100644 admin/bando/demos/Switch.svelte create mode 100644 admin/bando/demos/Switch.svelte.md create mode 100644 admin/bando/demos/Tabs.svelte create mode 100644 admin/bando/demos/Tabs.svelte.md create mode 100644 admin/bando/demos/Tiles.svelte create mode 100644 admin/bando/demos/Tiles.svelte.md create mode 100644 admin/bando/demos/Toast.svelte create mode 100644 admin/bando/demos/Toast.svelte.md create mode 100644 admin/bando/demos/Toastier.svelte create mode 100644 admin/bando/demos/Toastier.svelte.md create mode 100644 admin/bando/demos/Tooltip.svelte create mode 100644 admin/bando/demos/Tooltip.svelte.md create mode 100644 admin/bando/demos/Video.svelte create mode 100644 admin/bando/demos/Video.svelte.md create mode 100644 admin/bando/demos/WTVideo.svelte create mode 100644 admin/bando/demos/WTVideo.svelte.md create mode 100644 admin/main.js create mode 100644 admin/pages/Create.svelte create mode 100644 admin/pages/DocsBrowser.svelte create mode 100644 admin/pages/EmailConfig.svelte create mode 100644 admin/pages/EmailDNS.svelte create mode 100644 admin/pages/EmailSend.svelte create mode 100644 admin/pages/Errors.svelte create mode 100644 admin/pages/Home.svelte create mode 100644 admin/pages/ReadUpdate.svelte create mode 100644 admin/pages/Routes.svelte create mode 100644 admin/pages/Stats.svelte create mode 100644 admin/pages/Table.svelte create mode 100644 admin/pages/TableIndex.svelte create mode 100644 admin/pages/Tests.svelte create mode 100644 admin/routes.js create mode 100644 api/_errors.js create mode 100644 api/admin/email.js create mode 100644 api/admin/schema.js create mode 100644 api/admin/table.js create mode 100644 api/authcheck.js create mode 100644 api/devtools/djenterator.js create mode 100644 api/devtools/info.js create mode 100644 api/discord.js create mode 100644 api/email.js create mode 100644 api/livestream.js create mode 100644 api/login.js create mode 100644 api/logout.js create mode 100644 api/media.js create mode 100644 api/media_like.js create mode 100644 api/password_reset.js create mode 100644 api/payments/btcpay.js create mode 100644 api/payments/fake.js create mode 100644 api/payments/paypal.js create mode 100644 api/payments/stripe.js create mode 100644 api/payments/stripe_webhook.js create mode 100644 api/product.js create mode 100644 api/register.js create mode 100644 api/user/payments.js create mode 100644 api/user/profile.js create mode 100755 bando.js create mode 100644 bando.ps1 create mode 100644 build.json create mode 100644 build.prod.json create mode 100644 client/App.svelte create mode 100644 client/Footer.svelte create mode 100644 client/Header.svelte create mode 100644 client/Layout.svelte create mode 100644 client/api.js create mode 100644 client/assert.js create mode 100644 client/components/BTCPay.svelte create mode 100644 client/components/Blockstart.svelte create mode 100644 client/components/Calendar.svelte create mode 100644 client/components/Carousel.svelte create mode 100644 client/components/Chat.svelte create mode 100644 client/components/Code.svelte create mode 100644 client/components/CodeFormatter.svelte create mode 100644 client/components/Countdown.svelte create mode 100644 client/components/Darkmode.svelte create mode 100644 client/components/DataTable.svelte create mode 100644 client/components/DiscordReplay.svelte create mode 100644 client/components/FakePayment.svelte create mode 100644 client/components/Form.svelte create mode 100644 client/components/FormField.svelte create mode 100644 client/components/HLSVideo.svelte create mode 100644 client/components/HTML.svelte create mode 100644 client/components/HeadOnce.svelte create mode 100644 client/components/Icon.svelte create mode 100644 client/components/IconImage.svelte create mode 100644 client/components/IsVisible.svelte create mode 100644 client/components/LoggedIn.svelte create mode 100644 client/components/Login.svelte create mode 100644 client/components/Markdown.svelte create mode 100644 client/components/Modal.svelte create mode 100644 client/components/OGPreview.svelte create mode 100644 client/components/Pagination.svelte create mode 100644 client/components/Paypal.svelte create mode 100644 client/components/PlaceHolder.svelte create mode 100644 client/components/ProgressMeter.svelte create mode 100644 client/components/Reloader.svelte create mode 100644 client/components/ShareButton.svelte create mode 100644 client/components/Sidebar.svelte create mode 100644 client/components/SnapImage.svelte create mode 100644 client/components/Source.svelte create mode 100644 client/components/Spinner.svelte create mode 100644 client/components/Stripe.svelte create mode 100644 client/components/TOS.svelte create mode 100644 client/components/Tabs.svelte create mode 100644 client/components/Toasts.svelte create mode 100644 client/components/Video.svelte create mode 100644 client/components/WTVideo.svelte create mode 100644 client/fsm.js create mode 100644 client/helpers.js create mode 100644 client/livestreams.js create mode 100644 client/logging.js create mode 100644 client/main.js create mode 100644 client/pages/Discord.svelte create mode 100644 client/pages/Home.svelte create mode 100644 client/pages/Landing.svelte create mode 100644 client/pages/Live.svelte create mode 100644 client/pages/LiveIndex.svelte create mode 100644 client/pages/Login.svelte create mode 100644 client/pages/NotFound.svelte create mode 100644 client/pages/Payment.svelte create mode 100644 client/pages/Register.svelte create mode 100644 client/pages/ResetPassword.svelte create mode 100644 client/pages/TOS.svelte create mode 100644 client/pages/Unsubscribe.svelte create mode 100644 client/pages/UserProfile.svelte create mode 100644 client/pages/Video.svelte create mode 100644 client/pages/VideoIndex.svelte create mode 100644 client/routes.js create mode 100644 client/stores.js create mode 100644 client/websocket.js create mode 100644 client/wt.js create mode 100644 commands/api.js create mode 100644 commands/build.js create mode 100644 commands/codedoc.js create mode 100644 commands/convert.js create mode 100644 commands/coverage.js create mode 100644 commands/deploy.js create mode 100644 commands/devsvc.js create mode 100644 commands/djent.js create mode 100644 commands/gen_players.js create mode 100644 commands/icons.js create mode 100755 commands/init.js create mode 100644 commands/livestreams.js create mode 100644 commands/loganalyzer.js create mode 100644 commands/lorem.js create mode 100644 commands/media.js create mode 100644 commands/moovfix.js create mode 100644 commands/queue.js create mode 100644 commands/rendered.js create mode 100644 commands/templates/client/Footer.svelte create mode 100644 commands/templates/client/Header.svelte create mode 100644 commands/templates/client/Layout.svelte create mode 100644 commands/templates/client/config.js create mode 100644 commands/templates/client/pages/Home.svelte create mode 100644 commands/templates/client/routes.js create mode 100644 commands/templates/emails/config.js create mode 100644 commands/templates/rendered/Footer.svelte create mode 100644 commands/templates/rendered/Header.svelte create mode 100644 commands/templates/rendered/Layout.svelte create mode 100644 commands/templates/rendered/index.svelte create mode 100644 commands/templates/rendered/pages/index.svelte create mode 100644 commands/templates/secrets/config.json create mode 100644 commands/templates/secrets/email.json create mode 100644 commands/thumbnail.js create mode 100644 commands/tracker.js create mode 100644 commands/unsubkeys.js create mode 100644 emails/change_email.txt create mode 100644 emails/discord_email.html create mode 100644 emails/discord_email.txt create mode 100644 emails/invoice.html create mode 100644 emails/invoice.txt create mode 100644 emails/receipt.html create mode 100644 emails/receipt.txt create mode 100644 emails/register_email.html create mode 100644 emails/register_email.txt create mode 100644 emails/reset_email.html create mode 100644 emails/reset_email.txt create mode 100644 emails/reset_finished.html create mode 100644 emails/reset_finished.txt create mode 100644 emails/test.html create mode 100644 emails/test.txt create mode 100644 emails/welcome_email.html create mode 100644 emails/welcome_email.txt create mode 100644 knexfile.cjs create mode 100644 lib/api.js create mode 100644 lib/auth.js create mode 100644 lib/blog.js create mode 100644 lib/builderator.js create mode 100644 lib/config.js create mode 100644 lib/devtools.js create mode 100644 lib/docgen.js create mode 100644 lib/email.js create mode 100644 lib/logging.js create mode 100644 lib/models.js create mode 100644 lib/ormish.js create mode 100644 lib/queues.js create mode 100644 lib/testing.js create mode 100644 migrations/20210407193844_initial.cjs create mode 100644 migrations/20210508193210_reset_codes.cjs create mode 100644 migrations/20210724194201_payments.cjs create mode 100644 migrations/20210801144128_media.cjs create mode 100644 migrations/20210807180515_user_payment.cjs create mode 100644 migrations/20210823001710_media_needs_poster.cjs create mode 100644 migrations/20210828133355_site_metadata.cjs create mode 100644 migrations/20210911122326_user_unsubscribe.cjs create mode 100644 migrations/20210911191222_user_reset_count.cjs create mode 100644 migrations/20211111034030_media_meta_fields.cjs create mode 100644 migrations/20211122202014_media_add_slug.cjs create mode 100644 migrations/20220107182030_user_payment_remove.cjs create mode 100644 migrations/20220224195155_livestream.cjs create mode 100644 migrations/20220228190915_unsubkey_32_hex.cjs create mode 100644 migrations/20220314020215_payment_substate_cause.cjs create mode 100644 migrations/20220426213105_livestream_add_state_check.cjs create mode 100644 migrations/20220427232344_livestream_media.cjs create mode 100644 migrations/20220428184247_livestream_viewers.cjs create mode 100644 migrations/20220507231257_livestream_episode_number.cjs create mode 100644 migrations/20220522091823_product.cjs create mode 100644 migrations/20220603163208_likes_on_videos.cjs create mode 100644 migrations/20220921230725_payment_random_receipt_id.cjs create mode 100644 nodemon.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 queues/discord.js create mode 100644 queues/live.js create mode 100644 queues/mail.js create mode 100644 queues/paypal.js create mode 100644 queues/stripe.js create mode 100644 rendered/Footer.svelte create mode 100644 rendered/Header.svelte create mode 100644 rendered/Layout.svelte create mode 100644 rendered/docs/howto/long-start-step-01-the-unstyled-fake-ui.md create mode 100644 rendered/docs/howto/long-start-step-02-the-blockstart-fake-ui.md create mode 100644 rendered/docs/howto/long-start-step-03-the-styled-fake-ui.md create mode 100644 rendered/docs/howto/long-start-step-04-testing-the-fake-ui.md create mode 100644 rendered/docs/howto/long-start-step-05-the-fake-api-handler.md create mode 100644 rendered/docs/howto/long-start-step-06-the-database-table.md create mode 100644 rendered/docs/howto/long-start-step-07-libmodelsjs-and-model-testing.md create mode 100644 rendered/docs/howto/long-start-step-08-the-api-to-the-database.md create mode 100644 rendered/docs/howto/long-start-step-09-adding-registration-and-authentication.md create mode 100644 rendered/docs/howto/long-start-step-10-static-leaderboard-command.md create mode 100644 rendered/docs/howto/long-start-step-11-emailing-winners.md create mode 100644 rendered/docs/howto/long-start-step-12-sending-emails-with-queues.md create mode 100644 rendered/docs/howto/long-start-step-13-advanced-fancy-fsm-based-ui.md create mode 100644 rendered/docs/howto/long-start-step-14-delayed-optional-registration.md create mode 100644 rendered/docs/howto/long-start-step-15-websocket-winner-notification.md create mode 100644 rendered/docs/long-start.md create mode 100644 rendered/docs/quick-start.md create mode 100644 rendered/docs/tips-tricks.md create mode 100644 rendered/feed_index.json create mode 100644 rendered/index.svelte create mode 100644 rendered/pages/about/index.svelte create mode 100644 rendered/pages/blog/[slug]/index.svelte create mode 100644 rendered/pages/blog/index.svelte create mode 100644 rendered/pages/docs/[slug]/index.svelte create mode 100644 rendered/pages/docs/howto/[slug]/index.svelte create mode 100644 rendered/pages/docs/howto/index.svelte create mode 100644 rendered/pages/docs/index.svelte create mode 100644 rendered/pages/index.svelte create mode 100644 rendered/pages/live/[slug]/index.svelte create mode 100644 rendered/pages/live/[slug]/player.svelte create mode 100644 rendered/pages/live/index.js create mode 100644 rendered/pages/live/index.svelte create mode 100644 rendered/pages/privacy/index.svelte create mode 100644 rendered/pages/test_large_card.svelte create mode 100644 rendered/pages/test_og_card.svelte create mode 100644 rendered/pages/test_video_card.svelte create mode 100644 rendered/pages/video_container.svelte create mode 100644 rendered/player.html create mode 100644 rendered/rollup.config.mjs create mode 100644 rendered/src/template.html create mode 100644 scripts/osx.config.cjs create mode 100644 scripts/prod.config.cjs create mode 100644 scripts/setupTypeScript.js create mode 100644 socket/chat.js create mode 100644 socket/live.js create mode 100644 socket/reloader.js create mode 100644 static/admin/index.html create mode 100644 static/android-chrome-192x192.png create mode 100644 static/android-chrome-512x512.png create mode 100644 static/apple-touch-icon.png create mode 100644 static/blockstart.css create mode 100644 static/browserconfig.xml create mode 100644 static/client/index.html create mode 100644 static/color.css create mode 100644 static/css/pattern.min.css create mode 100644 static/css/prism.css create mode 100644 static/djenterator/api.js create mode 100644 static/djenterator/api.js.vars create mode 100644 static/djenterator/client.svelte create mode 100644 static/djenterator/client.svelte.vars create mode 100644 static/djenterator/command.js create mode 100644 static/djenterator/command.js.vars create mode 100644 static/djenterator/form.svelte create mode 100644 static/djenterator/form.svelte.vars create mode 100644 static/djenterator/migration.js create mode 100644 static/djenterator/migration.js.vars create mode 100644 static/djenterator/queues.js create mode 100644 static/djenterator/queues.js.vars create mode 100644 static/djenterator/rendered.svelte create mode 100644 static/djenterator/rendered.svelte.vars create mode 100644 static/djenterator/socket.js create mode 100644 static/djenterator/socket.js.vars create mode 100644 static/djenterator/ui_test.js create mode 100644 static/djenterator/ui_test.js.vars create mode 100644 static/favicon-16x16.png create mode 100644 static/favicon-32x32.png create mode 100644 static/favicon.ico create mode 100644 static/favicon.png create mode 100644 static/feather-sprite.svg create mode 100644 static/fonts/IMFellEnglishSC-Regular.ttf create mode 100755 static/fonts/computer.woff create mode 100644 static/global.css create mode 100644 static/icons/LICENSE create mode 100644 static/icons/accessibility.svg create mode 100644 static/icons/activity.svg create mode 100644 static/icons/air-vent.svg create mode 100644 static/icons/airplay.svg create mode 100644 static/icons/alarm-check.svg create mode 100644 static/icons/alarm-clock-off.svg create mode 100644 static/icons/alarm-clock.svg create mode 100644 static/icons/alarm-minus.svg create mode 100644 static/icons/alarm-plus.svg create mode 100644 static/icons/album.svg create mode 100644 static/icons/alert-circle.svg create mode 100644 static/icons/alert-octagon.svg create mode 100644 static/icons/alert-triangle.svg create mode 100644 static/icons/align-center-horizontal.svg create mode 100644 static/icons/align-center-vertical.svg create mode 100644 static/icons/align-center.svg create mode 100644 static/icons/align-end-horizontal.svg create mode 100644 static/icons/align-end-vertical.svg create mode 100644 static/icons/align-horizontal-distribute-center.svg create mode 100644 static/icons/align-horizontal-distribute-end.svg create mode 100644 static/icons/align-horizontal-distribute-start.svg create mode 100644 static/icons/align-horizontal-justify-center.svg create mode 100644 static/icons/align-horizontal-justify-end.svg create mode 100644 static/icons/align-horizontal-justify-start.svg create mode 100644 static/icons/align-horizontal-space-around.svg create mode 100644 static/icons/align-horizontal-space-between.svg create mode 100644 static/icons/align-justify.svg create mode 100644 static/icons/align-left.svg create mode 100644 static/icons/align-right.svg create mode 100644 static/icons/align-start-horizontal.svg create mode 100644 static/icons/align-start-vertical.svg create mode 100644 static/icons/align-vertical-distribute-center.svg create mode 100644 static/icons/align-vertical-distribute-end.svg create mode 100644 static/icons/align-vertical-distribute-start.svg create mode 100644 static/icons/align-vertical-justify-center.svg create mode 100644 static/icons/align-vertical-justify-end.svg create mode 100644 static/icons/align-vertical-justify-start.svg create mode 100644 static/icons/align-vertical-space-around.svg create mode 100644 static/icons/align-vertical-space-between.svg create mode 100644 static/icons/anchor.svg create mode 100644 static/icons/angry.svg create mode 100644 static/icons/annoyed.svg create mode 100644 static/icons/aperture.svg create mode 100644 static/icons/apple.svg create mode 100644 static/icons/archive-restore.svg create mode 100644 static/icons/archive.svg create mode 100644 static/icons/armchair.svg create mode 100644 static/icons/arrow-big-down.svg create mode 100644 static/icons/arrow-big-left.svg create mode 100644 static/icons/arrow-big-right.svg create mode 100644 static/icons/arrow-big-up.svg create mode 100644 static/icons/arrow-down-circle.svg create mode 100644 static/icons/arrow-down-left.svg create mode 100644 static/icons/arrow-down-right.svg create mode 100644 static/icons/arrow-down.svg create mode 100644 static/icons/arrow-left-circle.svg create mode 100644 static/icons/arrow-left-right.svg create mode 100644 static/icons/arrow-left.svg create mode 100644 static/icons/arrow-right-circle.svg create mode 100644 static/icons/arrow-right.svg create mode 100644 static/icons/arrow-up-circle.svg create mode 100644 static/icons/arrow-up-down.svg create mode 100644 static/icons/arrow-up-left.svg create mode 100644 static/icons/arrow-up-right.svg create mode 100644 static/icons/arrow-up.svg create mode 100644 static/icons/asterisk.svg create mode 100644 static/icons/at-sign.svg create mode 100644 static/icons/award.svg create mode 100644 static/icons/axe.svg create mode 100644 static/icons/axis-3d.svg create mode 100644 static/icons/baby.svg create mode 100644 static/icons/backpack.svg create mode 100644 static/icons/baggage-claim.svg create mode 100644 static/icons/banana.svg create mode 100644 static/icons/banknote.svg create mode 100644 static/icons/bar-chart-2.svg create mode 100644 static/icons/bar-chart-3.svg create mode 100644 static/icons/bar-chart-4.svg create mode 100644 static/icons/bar-chart-horizontal.svg create mode 100644 static/icons/bar-chart.svg create mode 100644 static/icons/baseline.svg create mode 100644 static/icons/bath.svg create mode 100644 static/icons/battery-charging.svg create mode 100644 static/icons/battery-full.svg create mode 100644 static/icons/battery-low.svg create mode 100644 static/icons/battery-medium.svg create mode 100644 static/icons/battery.svg create mode 100644 static/icons/beaker.svg create mode 100644 static/icons/bean-off.svg create mode 100644 static/icons/bean.svg create mode 100644 static/icons/bed-double.svg create mode 100644 static/icons/bed-single.svg create mode 100644 static/icons/bed.svg create mode 100644 static/icons/beer.svg create mode 100644 static/icons/bell-minus.svg create mode 100644 static/icons/bell-off.svg create mode 100644 static/icons/bell-plus.svg create mode 100644 static/icons/bell-ring.svg create mode 100644 static/icons/bell.svg create mode 100644 static/icons/bike.svg create mode 100644 static/icons/binary.svg create mode 100644 static/icons/bitcoin.svg create mode 100644 static/icons/bluetooth-connected.svg create mode 100644 static/icons/bluetooth-off.svg create mode 100644 static/icons/bluetooth-searching.svg create mode 100644 static/icons/bluetooth.svg create mode 100644 static/icons/bold.svg create mode 100644 static/icons/bomb.svg create mode 100644 static/icons/bone.svg create mode 100644 static/icons/book-open-check.svg create mode 100644 static/icons/book-open.svg create mode 100644 static/icons/book.svg create mode 100644 static/icons/bookmark-minus.svg create mode 100644 static/icons/bookmark-plus.svg create mode 100644 static/icons/bookmark.svg create mode 100644 static/icons/bot.svg create mode 100644 static/icons/box-select.svg create mode 100644 static/icons/box.svg create mode 100644 static/icons/boxes.svg create mode 100644 static/icons/briefcase.svg create mode 100644 static/icons/brush.svg create mode 100644 static/icons/bug.svg create mode 100644 static/icons/building-2.svg create mode 100644 static/icons/building.svg create mode 100644 static/icons/bus.svg create mode 100644 static/icons/cake.svg create mode 100644 static/icons/calculator.svg create mode 100644 static/icons/calendar-check-2.svg create mode 100644 static/icons/calendar-check.svg create mode 100644 static/icons/calendar-clock.svg create mode 100644 static/icons/calendar-days.svg create mode 100644 static/icons/calendar-heart.svg create mode 100644 static/icons/calendar-minus.svg create mode 100644 static/icons/calendar-off.svg create mode 100644 static/icons/calendar-plus.svg create mode 100644 static/icons/calendar-range.svg create mode 100644 static/icons/calendar-search.svg create mode 100644 static/icons/calendar-x-2.svg create mode 100644 static/icons/calendar-x.svg create mode 100644 static/icons/calendar.svg create mode 100644 static/icons/camera-off.svg create mode 100644 static/icons/camera.svg create mode 100644 static/icons/candy-off.svg create mode 100644 static/icons/candy.svg create mode 100644 static/icons/car.svg create mode 100644 static/icons/carrot.svg create mode 100644 static/icons/cast.svg create mode 100644 static/icons/cat.svg create mode 100644 static/icons/check-check.svg create mode 100644 static/icons/check-circle-2.svg create mode 100644 static/icons/check-circle.svg create mode 100644 static/icons/check-square.svg create mode 100644 static/icons/check.svg create mode 100644 static/icons/chef-hat.svg create mode 100644 static/icons/cherry.svg create mode 100644 static/icons/chevron-down.svg create mode 100644 static/icons/chevron-first.svg create mode 100644 static/icons/chevron-last.svg create mode 100644 static/icons/chevron-left.svg create mode 100644 static/icons/chevron-right.svg create mode 100644 static/icons/chevron-up.svg create mode 100644 static/icons/chevrons-down-up.svg create mode 100644 static/icons/chevrons-down.svg create mode 100644 static/icons/chevrons-left-right.svg create mode 100644 static/icons/chevrons-left.svg create mode 100644 static/icons/chevrons-right-left.svg create mode 100644 static/icons/chevrons-right.svg create mode 100644 static/icons/chevrons-up-down.svg create mode 100644 static/icons/chevrons-up.svg create mode 100644 static/icons/chrome.svg create mode 100644 static/icons/cigarette-off.svg create mode 100644 static/icons/cigarette.svg create mode 100644 static/icons/circle-dot.svg create mode 100644 static/icons/circle-ellipsis.svg create mode 100644 static/icons/circle-slashed.svg create mode 100644 static/icons/circle.svg create mode 100644 static/icons/citrus.svg create mode 100644 static/icons/clapperboard.svg create mode 100644 static/icons/clipboard-check.svg create mode 100644 static/icons/clipboard-copy.svg create mode 100644 static/icons/clipboard-edit.svg create mode 100644 static/icons/clipboard-list.svg create mode 100644 static/icons/clipboard-signature.svg create mode 100644 static/icons/clipboard-type.svg create mode 100644 static/icons/clipboard-x.svg create mode 100644 static/icons/clipboard.svg create mode 100644 static/icons/clock-1.svg create mode 100644 static/icons/clock-10.svg create mode 100644 static/icons/clock-11.svg create mode 100644 static/icons/clock-12.svg create mode 100644 static/icons/clock-2.svg create mode 100644 static/icons/clock-3.svg create mode 100644 static/icons/clock-4.svg create mode 100644 static/icons/clock-5.svg create mode 100644 static/icons/clock-6.svg create mode 100644 static/icons/clock-7.svg create mode 100644 static/icons/clock-8.svg create mode 100644 static/icons/clock-9.svg create mode 100644 static/icons/clock.svg create mode 100644 static/icons/cloud-cog.svg create mode 100644 static/icons/cloud-drizzle.svg create mode 100644 static/icons/cloud-fog.svg create mode 100644 static/icons/cloud-hail.svg create mode 100644 static/icons/cloud-lightning.svg create mode 100644 static/icons/cloud-moon-rain.svg create mode 100644 static/icons/cloud-moon.svg create mode 100644 static/icons/cloud-off.svg create mode 100644 static/icons/cloud-rain-wind.svg create mode 100644 static/icons/cloud-rain.svg create mode 100644 static/icons/cloud-snow.svg create mode 100644 static/icons/cloud-sun-rain.svg create mode 100644 static/icons/cloud-sun.svg create mode 100644 static/icons/cloud.svg create mode 100644 static/icons/cloudy.svg create mode 100644 static/icons/clover.svg create mode 100644 static/icons/code-2.svg create mode 100644 static/icons/code.svg create mode 100644 static/icons/codepen.svg create mode 100644 static/icons/codesandbox.svg create mode 100644 static/icons/coffee.svg create mode 100644 static/icons/cog.svg create mode 100644 static/icons/coins.svg create mode 100644 static/icons/columns.svg create mode 100644 static/icons/command.svg create mode 100644 static/icons/compass.svg create mode 100644 static/icons/component.svg create mode 100644 static/icons/concierge-bell.svg create mode 100644 static/icons/contact.svg create mode 100644 static/icons/contrast.svg create mode 100644 static/icons/cookie.svg create mode 100644 static/icons/copy.svg create mode 100644 static/icons/copyleft.svg create mode 100644 static/icons/copyright.svg create mode 100644 static/icons/corner-down-left.svg create mode 100644 static/icons/corner-down-right.svg create mode 100644 static/icons/corner-left-down.svg create mode 100644 static/icons/corner-left-up.svg create mode 100644 static/icons/corner-right-down.svg create mode 100644 static/icons/corner-right-up.svg create mode 100644 static/icons/corner-up-left.svg create mode 100644 static/icons/corner-up-right.svg create mode 100644 static/icons/cpu.svg create mode 100644 static/icons/credit-card.svg create mode 100644 static/icons/croissant.svg create mode 100644 static/icons/crop.svg create mode 100644 static/icons/cross.svg create mode 100644 static/icons/crosshair.svg create mode 100644 static/icons/crown.svg create mode 100644 static/icons/cup-soda.svg create mode 100644 static/icons/curly-braces.svg create mode 100644 static/icons/currency.svg create mode 100644 static/icons/database.svg create mode 100644 static/icons/delete.svg create mode 100644 static/icons/diamond.svg create mode 100644 static/icons/dice-1.svg create mode 100644 static/icons/dice-2.svg create mode 100644 static/icons/dice-3.svg create mode 100644 static/icons/dice-4.svg create mode 100644 static/icons/dice-5.svg create mode 100644 static/icons/dice-6.svg create mode 100644 static/icons/dices.svg create mode 100644 static/icons/diff.svg create mode 100644 static/icons/disc.svg create mode 100644 static/icons/divide-circle.svg create mode 100644 static/icons/divide-square.svg create mode 100644 static/icons/divide.svg create mode 100644 static/icons/dna-off.svg create mode 100644 static/icons/dna.svg create mode 100644 static/icons/dog.svg create mode 100644 static/icons/dollar-sign.svg create mode 100644 static/icons/download-cloud.svg create mode 100644 static/icons/download.svg create mode 100644 static/icons/dribbble.svg create mode 100644 static/icons/droplet.svg create mode 100644 static/icons/droplets.svg create mode 100644 static/icons/drumstick.svg create mode 100644 static/icons/dumbbell.svg create mode 100644 static/icons/ear-off.svg create mode 100644 static/icons/ear.svg create mode 100644 static/icons/edit-2.svg create mode 100644 static/icons/edit-3.svg create mode 100644 static/icons/edit.svg create mode 100644 static/icons/egg-fried.svg create mode 100644 static/icons/egg-off.svg create mode 100644 static/icons/egg.svg create mode 100644 static/icons/equal-not.svg create mode 100644 static/icons/equal.svg create mode 100644 static/icons/eraser.svg create mode 100644 static/icons/euro.svg create mode 100644 static/icons/expand.svg create mode 100644 static/icons/external-link.svg create mode 100644 static/icons/eye-off.svg create mode 100644 static/icons/eye.svg create mode 100644 static/icons/facebook.svg create mode 100644 static/icons/factory.svg create mode 100644 static/icons/fan.svg create mode 100644 static/icons/fast-forward.svg create mode 100644 static/icons/feather.svg create mode 100644 static/icons/figma.svg create mode 100644 static/icons/file-archive.svg create mode 100644 static/icons/file-audio-2.svg create mode 100644 static/icons/file-audio.svg create mode 100644 static/icons/file-axis-3d.svg create mode 100644 static/icons/file-badge-2.svg create mode 100644 static/icons/file-badge.svg create mode 100644 static/icons/file-bar-chart-2.svg create mode 100644 static/icons/file-bar-chart.svg create mode 100644 static/icons/file-box.svg create mode 100644 static/icons/file-check-2.svg create mode 100644 static/icons/file-check.svg create mode 100644 static/icons/file-clock.svg create mode 100644 static/icons/file-code.svg create mode 100644 static/icons/file-cog-2.svg create mode 100644 static/icons/file-cog.svg create mode 100644 static/icons/file-diff.svg create mode 100644 static/icons/file-digit.svg create mode 100644 static/icons/file-down.svg create mode 100644 static/icons/file-edit.svg create mode 100644 static/icons/file-heart.svg create mode 100644 static/icons/file-image.svg create mode 100644 static/icons/file-input.svg create mode 100644 static/icons/file-json-2.svg create mode 100644 static/icons/file-json.svg create mode 100644 static/icons/file-key-2.svg create mode 100644 static/icons/file-key.svg create mode 100644 static/icons/file-line-chart.svg create mode 100644 static/icons/file-lock-2.svg create mode 100644 static/icons/file-lock.svg create mode 100644 static/icons/file-minus-2.svg create mode 100644 static/icons/file-minus.svg create mode 100644 static/icons/file-output.svg create mode 100644 static/icons/file-pie-chart.svg create mode 100644 static/icons/file-plus-2.svg create mode 100644 static/icons/file-plus.svg create mode 100644 static/icons/file-question.svg create mode 100644 static/icons/file-scan.svg create mode 100644 static/icons/file-search-2.svg create mode 100644 static/icons/file-search.svg create mode 100644 static/icons/file-signature.svg create mode 100644 static/icons/file-spreadsheet.svg create mode 100644 static/icons/file-symlink.svg create mode 100644 static/icons/file-terminal.svg create mode 100644 static/icons/file-text.svg create mode 100644 static/icons/file-type-2.svg create mode 100644 static/icons/file-type.svg create mode 100644 static/icons/file-up.svg create mode 100644 static/icons/file-video-2.svg create mode 100644 static/icons/file-video.svg create mode 100644 static/icons/file-volume-2.svg create mode 100644 static/icons/file-volume.svg create mode 100644 static/icons/file-warning.svg create mode 100644 static/icons/file-x-2.svg create mode 100644 static/icons/file-x.svg create mode 100644 static/icons/file.svg create mode 100644 static/icons/files.svg create mode 100644 static/icons/film.svg create mode 100644 static/icons/filter.svg create mode 100644 static/icons/fingerprint.svg create mode 100644 static/icons/flag-off.svg create mode 100644 static/icons/flag-triangle-left.svg create mode 100644 static/icons/flag-triangle-right.svg create mode 100644 static/icons/flag.svg create mode 100644 static/icons/flame.svg create mode 100644 static/icons/flashlight-off.svg create mode 100644 static/icons/flashlight.svg create mode 100644 static/icons/flask-conical-off.svg create mode 100644 static/icons/flask-conical.svg create mode 100644 static/icons/flask-round.svg create mode 100644 static/icons/flip-horizontal-2.svg create mode 100644 static/icons/flip-horizontal.svg create mode 100644 static/icons/flip-vertical-2.svg create mode 100644 static/icons/flip-vertical.svg create mode 100644 static/icons/flower-2.svg create mode 100644 static/icons/flower.svg create mode 100644 static/icons/focus.svg create mode 100644 static/icons/folder-archive.svg create mode 100644 static/icons/folder-check.svg create mode 100644 static/icons/folder-clock.svg create mode 100644 static/icons/folder-closed.svg create mode 100644 static/icons/folder-cog-2.svg create mode 100644 static/icons/folder-cog.svg create mode 100644 static/icons/folder-down.svg create mode 100644 static/icons/folder-edit.svg create mode 100644 static/icons/folder-heart.svg create mode 100644 static/icons/folder-input.svg create mode 100644 static/icons/folder-key.svg create mode 100644 static/icons/folder-lock.svg create mode 100644 static/icons/folder-minus.svg create mode 100644 static/icons/folder-open.svg create mode 100644 static/icons/folder-output.svg create mode 100644 static/icons/folder-plus.svg create mode 100644 static/icons/folder-search-2.svg create mode 100644 static/icons/folder-search.svg create mode 100644 static/icons/folder-symlink.svg create mode 100644 static/icons/folder-tree.svg create mode 100644 static/icons/folder-up.svg create mode 100644 static/icons/folder-x.svg create mode 100644 static/icons/folder.svg create mode 100644 static/icons/folders.svg create mode 100644 static/icons/form-input.svg create mode 100644 static/icons/forward.svg create mode 100644 static/icons/frame.svg create mode 100644 static/icons/framer.svg create mode 100644 static/icons/frown.svg create mode 100644 static/icons/fuel.svg create mode 100644 static/icons/function-square.svg create mode 100644 static/icons/gamepad-2.svg create mode 100644 static/icons/gamepad.svg create mode 100644 static/icons/gauge.svg create mode 100644 static/icons/gavel.svg create mode 100644 static/icons/gem.svg create mode 100644 static/icons/ghost.svg create mode 100644 static/icons/gift.svg create mode 100644 static/icons/git-branch-plus.svg create mode 100644 static/icons/git-branch.svg create mode 100644 static/icons/git-commit.svg create mode 100644 static/icons/git-compare.svg create mode 100644 static/icons/git-fork.svg create mode 100644 static/icons/git-merge.svg create mode 100644 static/icons/git-pull-request-closed.svg create mode 100644 static/icons/git-pull-request-draft.svg create mode 100644 static/icons/git-pull-request.svg create mode 100644 static/icons/github.svg create mode 100644 static/icons/gitlab.svg create mode 100644 static/icons/glass-water.svg create mode 100644 static/icons/glasses.svg create mode 100644 static/icons/globe-2.svg create mode 100644 static/icons/globe.svg create mode 100644 static/icons/grab.svg create mode 100644 static/icons/graduation-cap.svg create mode 100644 static/icons/grape.svg create mode 100644 static/icons/grid.svg create mode 100644 static/icons/grip-horizontal.svg create mode 100644 static/icons/grip-vertical.svg create mode 100644 static/icons/hammer.svg create mode 100644 static/icons/hand-metal.svg create mode 100644 static/icons/hand.svg create mode 100644 static/icons/hard-drive.svg create mode 100644 static/icons/hard-hat.svg create mode 100644 static/icons/hash.svg create mode 100644 static/icons/haze.svg create mode 100644 static/icons/heading-1.svg create mode 100644 static/icons/heading-2.svg create mode 100644 static/icons/heading-3.svg create mode 100644 static/icons/heading-4.svg create mode 100644 static/icons/heading-5.svg create mode 100644 static/icons/heading-6.svg create mode 100644 static/icons/heading.svg create mode 100644 static/icons/headphones.svg create mode 100644 static/icons/heart-crack.svg create mode 100644 static/icons/heart-handshake.svg create mode 100644 static/icons/heart-off.svg create mode 100644 static/icons/heart-pulse.svg create mode 100644 static/icons/heart.svg create mode 100644 static/icons/help-circle.svg create mode 100644 static/icons/hexagon.svg create mode 100644 static/icons/highlighter.svg create mode 100644 static/icons/history.svg create mode 100644 static/icons/home.svg create mode 100644 static/icons/hop-off.svg create mode 100644 static/icons/hop.svg create mode 100644 static/icons/hourglass.svg create mode 100644 static/icons/ice-cream.svg create mode 100644 static/icons/image-minus.svg create mode 100644 static/icons/image-off.svg create mode 100644 static/icons/image-plus.svg create mode 100644 static/icons/image.svg create mode 100644 static/icons/import.svg create mode 100644 static/icons/inbox.svg create mode 100644 static/icons/indent.svg create mode 100644 static/icons/indian-rupee.svg create mode 100644 static/icons/infinity.svg create mode 100644 static/icons/info.svg create mode 100644 static/icons/inspect.svg create mode 100644 static/icons/instagram.svg create mode 100644 static/icons/italic.svg create mode 100644 static/icons/japanese-yen.svg create mode 100644 static/icons/joystick.svg create mode 100644 static/icons/key.svg create mode 100644 static/icons/keyboard.svg create mode 100644 static/icons/lamp-ceiling.svg create mode 100644 static/icons/lamp-desk.svg create mode 100644 static/icons/lamp-floor.svg create mode 100644 static/icons/lamp-wall-down.svg create mode 100644 static/icons/lamp-wall-up.svg create mode 100644 static/icons/lamp.svg create mode 100644 static/icons/landmark.svg create mode 100644 static/icons/languages.svg create mode 100644 static/icons/laptop-2.svg create mode 100644 static/icons/laptop.svg create mode 100644 static/icons/lasso-select.svg create mode 100644 static/icons/lasso.svg create mode 100644 static/icons/laugh.svg create mode 100644 static/icons/layers.svg create mode 100644 static/icons/layout-dashboard.svg create mode 100644 static/icons/layout-grid.svg create mode 100644 static/icons/layout-list.svg create mode 100644 static/icons/layout-template.svg create mode 100644 static/icons/layout.svg create mode 100644 static/icons/leaf.svg create mode 100644 static/icons/library.svg create mode 100644 static/icons/life-buoy.svg create mode 100644 static/icons/lightbulb-off.svg create mode 100644 static/icons/lightbulb.svg create mode 100644 static/icons/line-chart.svg create mode 100644 static/icons/link-2-off.svg create mode 100644 static/icons/link-2.svg create mode 100644 static/icons/link.svg create mode 100644 static/icons/linkedin.svg create mode 100644 static/icons/list-checks.svg create mode 100644 static/icons/list-end.svg create mode 100644 static/icons/list-minus.svg create mode 100644 static/icons/list-music.svg create mode 100644 static/icons/list-ordered.svg create mode 100644 static/icons/list-plus.svg create mode 100644 static/icons/list-start.svg create mode 100644 static/icons/list-video.svg create mode 100644 static/icons/list-x.svg create mode 100644 static/icons/list.svg create mode 100644 static/icons/loader-2.svg create mode 100644 static/icons/loader.svg create mode 100644 static/icons/locate-fixed.svg create mode 100644 static/icons/locate-off.svg create mode 100644 static/icons/locate.svg create mode 100644 static/icons/lock.svg create mode 100644 static/icons/log-in.svg create mode 100644 static/icons/log-out.svg create mode 100644 static/icons/luggage.svg create mode 100644 static/icons/magnet.svg create mode 100644 static/icons/mail-check.svg create mode 100644 static/icons/mail-minus.svg create mode 100644 static/icons/mail-open.svg create mode 100644 static/icons/mail-plus.svg create mode 100644 static/icons/mail-question.svg create mode 100644 static/icons/mail-search.svg create mode 100644 static/icons/mail-warning.svg create mode 100644 static/icons/mail-x.svg create mode 100644 static/icons/mail.svg create mode 100644 static/icons/mails.svg create mode 100644 static/icons/map-pin-off.svg create mode 100644 static/icons/map-pin.svg create mode 100644 static/icons/map.svg create mode 100644 static/icons/martini.svg create mode 100644 static/icons/maximize-2.svg create mode 100644 static/icons/maximize.svg create mode 100644 static/icons/medal.svg create mode 100644 static/icons/megaphone-off.svg create mode 100644 static/icons/megaphone.svg create mode 100644 static/icons/meh.svg create mode 100644 static/icons/menu.svg create mode 100644 static/icons/message-circle.svg create mode 100644 static/icons/message-square.svg create mode 100644 static/icons/mic-2.svg create mode 100644 static/icons/mic-off.svg create mode 100644 static/icons/mic.svg create mode 100644 static/icons/microscope.svg create mode 100644 static/icons/microwave.svg create mode 100644 static/icons/milestone.svg create mode 100644 static/icons/milk-off.svg create mode 100644 static/icons/milk.svg create mode 100644 static/icons/minimize-2.svg create mode 100644 static/icons/minimize.svg create mode 100644 static/icons/minus-circle.svg create mode 100644 static/icons/minus-square.svg create mode 100644 static/icons/minus.svg create mode 100644 static/icons/monitor-off.svg create mode 100644 static/icons/monitor-smartphone.svg create mode 100644 static/icons/monitor-speaker.svg create mode 100644 static/icons/monitor.svg create mode 100644 static/icons/moon.svg create mode 100644 static/icons/more-horizontal.svg create mode 100644 static/icons/more-vertical.svg create mode 100644 static/icons/mountain-snow.svg create mode 100644 static/icons/mountain.svg create mode 100644 static/icons/mouse-pointer-2.svg create mode 100644 static/icons/mouse-pointer-click.svg create mode 100644 static/icons/mouse-pointer.svg create mode 100644 static/icons/mouse.svg create mode 100644 static/icons/move-3d.svg create mode 100644 static/icons/move-diagonal-2.svg create mode 100644 static/icons/move-diagonal.svg create mode 100644 static/icons/move-horizontal.svg create mode 100644 static/icons/move-vertical.svg create mode 100644 static/icons/move.svg create mode 100644 static/icons/music-2.svg create mode 100644 static/icons/music-3.svg create mode 100644 static/icons/music-4.svg create mode 100644 static/icons/music.svg create mode 100644 static/icons/navigation-2-off.svg create mode 100644 static/icons/navigation-2.svg create mode 100644 static/icons/navigation-off.svg create mode 100644 static/icons/navigation.svg create mode 100644 static/icons/network.svg create mode 100644 static/icons/newspaper.svg create mode 100644 static/icons/nut-off.svg create mode 100644 static/icons/nut.svg create mode 100644 static/icons/octagon.svg create mode 100644 static/icons/option.svg create mode 100644 static/icons/outdent.svg create mode 100644 static/icons/package-2.svg create mode 100644 static/icons/package-check.svg create mode 100644 static/icons/package-minus.svg create mode 100644 static/icons/package-open.svg create mode 100644 static/icons/package-plus.svg create mode 100644 static/icons/package-search.svg create mode 100644 static/icons/package-x.svg create mode 100644 static/icons/package.svg create mode 100644 static/icons/paint-bucket.svg create mode 100644 static/icons/paintbrush-2.svg create mode 100644 static/icons/paintbrush.svg create mode 100644 static/icons/palette.svg create mode 100644 static/icons/palmtree.svg create mode 100644 static/icons/paperclip.svg create mode 100644 static/icons/party-popper.svg create mode 100644 static/icons/pause-circle.svg create mode 100644 static/icons/pause-octagon.svg create mode 100644 static/icons/pause.svg create mode 100644 static/icons/pen-tool.svg create mode 100644 static/icons/pencil.svg create mode 100644 static/icons/percent.svg create mode 100644 static/icons/person-standing.svg create mode 100644 static/icons/phone-call.svg create mode 100644 static/icons/phone-forwarded.svg create mode 100644 static/icons/phone-incoming.svg create mode 100644 static/icons/phone-missed.svg create mode 100644 static/icons/phone-off.svg create mode 100644 static/icons/phone-outgoing.svg create mode 100644 static/icons/phone.svg create mode 100644 static/icons/pie-chart.svg create mode 100644 static/icons/piggy-bank.svg create mode 100644 static/icons/pin-off.svg create mode 100644 static/icons/pin.svg create mode 100644 static/icons/pipette.svg create mode 100644 static/icons/pizza.svg create mode 100644 static/icons/plane.svg create mode 100644 static/icons/play-circle.svg create mode 100644 static/icons/play.svg create mode 100644 static/icons/plug-2.svg create mode 100644 static/icons/plug-zap.svg create mode 100644 static/icons/plug.svg create mode 100644 static/icons/plus-circle.svg create mode 100644 static/icons/plus-square.svg create mode 100644 static/icons/plus.svg create mode 100644 static/icons/pocket.svg create mode 100644 static/icons/podcast.svg create mode 100644 static/icons/pointer.svg create mode 100644 static/icons/pound-sterling.svg create mode 100644 static/icons/power-off.svg create mode 100644 static/icons/power.svg create mode 100644 static/icons/printer.svg create mode 100644 static/icons/puzzle.svg create mode 100644 static/icons/qr-code.svg create mode 100644 static/icons/quote.svg create mode 100644 static/icons/radio-receiver.svg create mode 100644 static/icons/radio.svg create mode 100644 static/icons/rectangle-horizontal.svg create mode 100644 static/icons/rectangle-vertical.svg create mode 100644 static/icons/recycle.svg create mode 100644 static/icons/redo-2.svg create mode 100644 static/icons/redo.svg create mode 100644 static/icons/refresh-ccw.svg create mode 100644 static/icons/refresh-cw.svg create mode 100644 static/icons/refrigerator.svg create mode 100644 static/icons/regex.svg create mode 100644 static/icons/repeat-1.svg create mode 100644 static/icons/repeat.svg create mode 100644 static/icons/reply-all.svg create mode 100644 static/icons/reply.svg create mode 100644 static/icons/rewind.svg create mode 100644 static/icons/rocket.svg create mode 100644 static/icons/rocking-chair.svg create mode 100644 static/icons/rotate-3d.svg create mode 100644 static/icons/rotate-ccw.svg create mode 100644 static/icons/rotate-cw.svg create mode 100644 static/icons/rss.svg create mode 100644 static/icons/ruler.svg create mode 100644 static/icons/russian-ruble.svg create mode 100644 static/icons/sailboat.svg create mode 100644 static/icons/save.svg create mode 100644 static/icons/scale-3d.svg create mode 100644 static/icons/scale.svg create mode 100644 static/icons/scaling.svg create mode 100644 static/icons/scan-face.svg create mode 100644 static/icons/scan-line.svg create mode 100644 static/icons/scan.svg create mode 100644 static/icons/scissors.svg create mode 100644 static/icons/screen-share-off.svg create mode 100644 static/icons/screen-share.svg create mode 100644 static/icons/scroll.svg create mode 100644 static/icons/search.svg create mode 100644 static/icons/send.svg create mode 100644 static/icons/separator-horizontal.svg create mode 100644 static/icons/separator-vertical.svg create mode 100644 static/icons/server-cog.svg create mode 100644 static/icons/server-crash.svg create mode 100644 static/icons/server-off.svg create mode 100644 static/icons/server.svg create mode 100644 static/icons/settings-2.svg create mode 100644 static/icons/settings.svg create mode 100644 static/icons/share-2.svg create mode 100644 static/icons/share.svg create mode 100644 static/icons/sheet.svg create mode 100644 static/icons/shield-alert.svg create mode 100644 static/icons/shield-check.svg create mode 100644 static/icons/shield-close.svg create mode 100644 static/icons/shield-off.svg create mode 100644 static/icons/shield.svg create mode 100644 static/icons/shirt.svg create mode 100644 static/icons/shopping-bag.svg create mode 100644 static/icons/shopping-cart.svg create mode 100644 static/icons/shovel.svg create mode 100644 static/icons/shower-head.svg create mode 100644 static/icons/shrink.svg create mode 100644 static/icons/shrub.svg create mode 100644 static/icons/shuffle.svg create mode 100644 static/icons/sidebar-close.svg create mode 100644 static/icons/sidebar-open.svg create mode 100644 static/icons/sidebar.svg create mode 100644 static/icons/sigma.svg create mode 100644 static/icons/signal-high.svg create mode 100644 static/icons/signal-low.svg create mode 100644 static/icons/signal-medium.svg create mode 100644 static/icons/signal-zero.svg create mode 100644 static/icons/signal.svg create mode 100644 static/icons/siren.svg create mode 100644 static/icons/skip-back.svg create mode 100644 static/icons/skip-forward.svg create mode 100644 static/icons/skull.svg create mode 100644 static/icons/slack.svg create mode 100644 static/icons/slash.svg create mode 100644 static/icons/slice.svg create mode 100644 static/icons/sliders-horizontal.svg create mode 100644 static/icons/sliders.svg create mode 100644 static/icons/smartphone-charging.svg create mode 100644 static/icons/smartphone.svg create mode 100644 static/icons/smile-plus.svg create mode 100644 static/icons/smile.svg create mode 100644 static/icons/snowflake.svg create mode 100644 static/icons/sofa.svg create mode 100644 static/icons/sort-asc.svg create mode 100644 static/icons/sort-desc.svg create mode 100644 static/icons/speaker.svg create mode 100644 static/icons/spline.svg create mode 100644 static/icons/sprout.svg create mode 100644 static/icons/square.svg create mode 100644 static/icons/star-half.svg create mode 100644 static/icons/star-off.svg create mode 100644 static/icons/star.svg create mode 100644 static/icons/stethoscope.svg create mode 100644 static/icons/sticker.svg create mode 100644 static/icons/sticky-note.svg create mode 100644 static/icons/stop-circle.svg create mode 100644 static/icons/stretch-horizontal.svg create mode 100644 static/icons/stretch-vertical.svg create mode 100644 static/icons/strikethrough.svg create mode 100644 static/icons/subscript.svg create mode 100644 static/icons/sun-dim.svg create mode 100644 static/icons/sun-medium.svg create mode 100644 static/icons/sun-moon.svg create mode 100644 static/icons/sun-snow.svg create mode 100644 static/icons/sun.svg create mode 100644 static/icons/sunrise.svg create mode 100644 static/icons/sunset.svg create mode 100644 static/icons/superscript.svg create mode 100644 static/icons/swiss-franc.svg create mode 100644 static/icons/switch-camera.svg create mode 100644 static/icons/sword.svg create mode 100644 static/icons/swords.svg create mode 100644 static/icons/syringe.svg create mode 100644 static/icons/table-2.svg create mode 100644 static/icons/table.svg create mode 100644 static/icons/tablet.svg create mode 100644 static/icons/tag.svg create mode 100644 static/icons/tags.svg create mode 100644 static/icons/target.svg create mode 100644 static/icons/tent.svg create mode 100644 static/icons/terminal-square.svg create mode 100644 static/icons/terminal.svg create mode 100644 static/icons/text-cursor-input.svg create mode 100644 static/icons/text-cursor.svg create mode 100644 static/icons/thermometer-snowflake.svg create mode 100644 static/icons/thermometer-sun.svg create mode 100644 static/icons/thermometer.svg create mode 100644 static/icons/thumbs-down.svg create mode 100644 static/icons/thumbs-up.svg create mode 100644 static/icons/ticket.svg create mode 100644 static/icons/timer-off.svg create mode 100644 static/icons/timer-reset.svg create mode 100644 static/icons/timer.svg create mode 100644 static/icons/toggle-left.svg create mode 100644 static/icons/toggle-right.svg create mode 100644 static/icons/tornado.svg create mode 100644 static/icons/toy-brick.svg create mode 100644 static/icons/train.svg create mode 100644 static/icons/trash-2.svg create mode 100644 static/icons/trash.svg create mode 100644 static/icons/tree-deciduous.svg create mode 100644 static/icons/tree-pine.svg create mode 100644 static/icons/trees.svg create mode 100644 static/icons/trello.svg create mode 100644 static/icons/trending-down.svg create mode 100644 static/icons/trending-up.svg create mode 100644 static/icons/triangle.svg create mode 100644 static/icons/trophy.svg create mode 100644 static/icons/truck.svg create mode 100644 static/icons/tv-2.svg create mode 100644 static/icons/tv.svg create mode 100644 static/icons/twitch.svg create mode 100644 static/icons/twitter.svg create mode 100644 static/icons/type.svg create mode 100644 static/icons/umbrella.svg create mode 100644 static/icons/underline.svg create mode 100644 static/icons/undo-2.svg create mode 100644 static/icons/undo.svg create mode 100644 static/icons/unlink-2.svg create mode 100644 static/icons/unlink.svg create mode 100644 static/icons/unlock.svg create mode 100644 static/icons/upload-cloud.svg create mode 100644 static/icons/upload.svg create mode 100644 static/icons/usb.svg create mode 100644 static/icons/user-check.svg create mode 100644 static/icons/user-cog.svg create mode 100644 static/icons/user-minus.svg create mode 100644 static/icons/user-plus.svg create mode 100644 static/icons/user-x.svg create mode 100644 static/icons/user.svg create mode 100644 static/icons/users.svg create mode 100644 static/icons/utensils-crossed.svg create mode 100644 static/icons/utensils.svg create mode 100644 static/icons/vegan.svg create mode 100644 static/icons/venetian-mask.svg create mode 100644 static/icons/verified.svg create mode 100644 static/icons/vibrate-off.svg create mode 100644 static/icons/vibrate.svg create mode 100644 static/icons/video-off.svg create mode 100644 static/icons/video.svg create mode 100644 static/icons/view.svg create mode 100644 static/icons/voicemail.svg create mode 100644 static/icons/volume-1.svg create mode 100644 static/icons/volume-2.svg create mode 100644 static/icons/volume-x.svg create mode 100644 static/icons/volume.svg create mode 100644 static/icons/wallet.svg create mode 100644 static/icons/wand-2.svg create mode 100644 static/icons/wand.svg create mode 100644 static/icons/watch.svg create mode 100644 static/icons/waves.svg create mode 100644 static/icons/webcam.svg create mode 100644 static/icons/webhook.svg create mode 100644 static/icons/wheat-off.svg create mode 100644 static/icons/wheat.svg create mode 100644 static/icons/wifi-off.svg create mode 100644 static/icons/wifi.svg create mode 100644 static/icons/wind.svg create mode 100644 static/icons/wine-off.svg create mode 100644 static/icons/wine.svg create mode 100644 static/icons/wrap-text.svg create mode 100644 static/icons/wrench.svg create mode 100644 static/icons/x-circle.svg create mode 100644 static/icons/x-octagon.svg create mode 100644 static/icons/x-square.svg create mode 100644 static/icons/x.svg create mode 100644 static/icons/youtube.svg create mode 100644 static/icons/zap-off.svg create mode 100644 static/icons/zap.svg create mode 100644 static/icons/zoom-in.svg create mode 100644 static/icons/zoom-out.svg create mode 100644 static/images/Bitcoin_logo.svg create mode 100644 static/images/PayPal.svg create mode 100644 static/images/header.svg create mode 100644 static/images/payment_background.jpg create mode 100644 static/images/zed.png create mode 100644 static/js/chart.min.js create mode 100644 static/js/chartjs-plugin-annotation.esm.js create mode 100644 static/js/chartjs-plugin-annotation.js create mode 100644 static/js/chartjs-plugin-annotation.min.js create mode 100644 static/js/hls.js create mode 100644 static/js/hls.min.js.map create mode 100644 static/js/prism.cjs create mode 100644 static/js/socket.io.min.js create mode 100644 static/js/socket.io.min.js.map create mode 100644 static/js/webtorrent.js create mode 100644 static/js/ztext.min.js create mode 100644 static/logo-40.png create mode 100644 static/logo-small.svg create mode 100644 static/logo.png create mode 100644 static/logo.svg create mode 100644 static/monochrome.css create mode 100644 static/mstile-150x150.png create mode 100644 static/prod_icons.json create mode 100644 static/safari-pinned-tab.svg create mode 100644 static/service-worker.js create mode 100644 static/site.webmanifest create mode 100644 static/test.js create mode 100644 static/test.md create mode 100644 static/tos.json create mode 100644 tests/cards.json create mode 100644 tests/client/assert.js create mode 100644 tests/client/fsm.js create mode 100644 tests/client/helpers.js create mode 100644 tests/lib/ormish.js create mode 100644 tests/models/media.js create mode 100644 tests/models/payment.js create mode 100644 tests/models/site.js create mode 100644 tests/models/user.js create mode 100644 tests/models/user_payment.js create mode 100644 tests/ui/admin_email.js create mode 100644 tests/ui/admin_tables.js create mode 100644 tests/ui/demos.js create mode 100644 tests/ui/livestream.js create mode 100644 tests/ui/login.js create mode 100644 tests/ui/password_reset.js create mode 100644 tests/ui/payments.js create mode 100644 tests/ui/register.js create mode 100644 tests/ui/unsubscribe.js create mode 100644 tests/ui/user_profile.js diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..b2af617 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,277 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "plugins": ["svelte3"], + "overrides": [ + {"files": "*.svelte", "processor": "svelte3/svelte3"} + ], + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 2021, + "sourceType": "module" + }, + "rules": { + "accessor-pairs": "error", + "array-bracket-newline": "off", + "array-bracket-spacing": [ "warn", "never" ], + "array-callback-return": "error", + "array-element-newline": "off", + "arrow-body-style": "off", + "arrow-parens": "off", + "arrow-spacing": [ + "error", + { + "after": true, + "before": true + } + ], + "block-scoped-var": "error", + "block-spacing": "error", + "brace-style": [ + "error", + "1tbs" + ], + "callback-return": "off", + "camelcase": "off", + "capitalized-comments": "off", + "class-methods-use-this": "off", + "comma-dangle": "off", + "comma-spacing": [ + "warn", + { + "after": true, + "before": false + } + ], + "comma-style": [ + "error", + "last" + ], + "complexity": "error", + "computed-property-spacing": [ + "error", + "never" + ], + "consistent-return": "error", + "consistent-this": "error", + "curly": "off", + "default-case": "error", + "dot-location": "off", + "dot-notation": "off", + "eol-last": "error", + "eqeqeq": "off", + "func-call-spacing": "error", + "func-name-matching": "error", + "func-names": "error", + "func-style": [ + "error", + "expression" + ], + "function-paren-newline": "off", + "generator-star-spacing": "error", + "global-require": "off", + "guard-for-in": "warn", + "handle-callback-err": "error", + "id-blacklist": "error", + "id-length": "off", + "id-match": "error", + "implicit-arrow-linebreak": [ + "error", + "beside" + ], + "indent": "off", + "indent-legacy": "off", + "init-declarations": "warn", + "jsx-quotes": "error", + "key-spacing": "warn", + "keyword-spacing": "off", + "line-comment-position": "off", + "linebreak-style": [ + "error", + "unix" + ], + "lines-around-comment": "off", + "lines-around-directive": "error", + "lines-between-class-members": "error", + "max-classes-per-file": "off", + "max-depth": "error", + "max-len": "off", + "max-lines": "off", + "max-lines-per-function": "off", + "max-nested-callbacks": "error", + "max-params": "off", + "max-statements": "off", + "max-statements-per-line": "error", + "multiline-comment-style": "off", + "new-cap": ["off"], + "new-parens": "error", + "newline-after-var": "off", + "newline-before-return": "off", + "newline-per-chained-call": "off", + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "off", + "no-bitwise": "error", + "no-buffer-constructor": "error", + "no-caller": "error", + "no-catch-shadow": "error", + "no-confusing-arrow": "error", + "no-console": "warn", + "no-continue": "error", + "no-div-regex": "error", + "no-duplicate-imports": "error", + "no-else-return": "off", + "no-empty-function": "off", + "no-eq-null": "off", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-extra-parens": "off", + "no-floating-decimal": "error", + "no-implicit-coercion": "error", + "no-implicit-globals": "error", + "no-implied-eval": "error", + "no-inline-comments": "off", + "no-invalid-this": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": "error", + "no-lone-blocks": "error", + "no-lonely-if": "off", + "no-loop-func": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-mixed-operators": "error", + "no-mixed-requires": "error", + "no-multi-assign": "error", + "no-multi-spaces": "off", + "no-multi-str": "error", + "no-multiple-empty-lines": "warn", + "no-native-reassign": "error", + "no-negated-condition": "off", + "no-negated-in-lhs": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-object": "error", + "no-new-require": "error", + "no-new-wrappers": "error", + "no-octal-escape": "error", + "no-param-reassign": "error", + "no-path-concat": "error", + "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], + "no-process-env": "off", + "no-process-exit": "off", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-restricted-globals": "error", + "no-restricted-imports": "error", + "no-restricted-modules": "error", + "no-restricted-properties": "error", + "no-restricted-syntax": "error", + "no-return-assign": "warn", + "no-return-await": "off", + "no-script-url": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-spaced-func": "error", + "no-sync": "warn", + "no-tabs": "off", + "no-template-curly-in-string": "error", + "no-ternary": "off", + "no-throw-literal": "error", + "no-trailing-spaces": "off", + "no-undef-init": "off", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": "error", + "no-unused-expressions": "error", + "no-use-before-define": ["error", {"functions": true, "classes": false}], + "no-useless-call": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "no-void": "error", + "no-warning-comments": "off", + "no-whitespace-before-property": "error", + "no-with": "error", + "nonblock-statement-body-position": "error", + "object-curly-newline": "off", + "object-curly-spacing": "off", + "object-shorthand": "warn", + "one-var": "off", + "one-var-declaration-per-line": "error", + "operator-assignment": "error", + "operator-linebreak": "error", + "padded-blocks": "off", + "padding-line-between-statements": "error", + "prefer-arrow-callback": "error", + "prefer-const": "off", + "prefer-destructuring": "off", + "prefer-numeric-literals": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": "error", + "prefer-reflect": "off", + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "quote-props": "off", + "quotes": "off", + "radix": "error", + "require-atomic-updates": "warn", + "require-await": "off", + "require-jsdoc": "off", + "require-unicode-regexp": "off", + "rest-spread-spacing": "error", + "semi": "off", + "semi-spacing": "error", + "semi-style": [ + "error", + "last" + ], + "sort-imports": "off", + "sort-keys": "off", + "sort-vars": "error", + "space-before-blocks": "error", + "space-before-function-paren": "off", + "space-in-parens": [ + "error", + "never" + ], + "space-infix-ops": "off", + "space-unary-ops": "error", + "spaced-comment": [ + "error", + "always" + ], + "strict": "error", + "switch-colon-spacing": "error", + "symbol-description": "error", + "template-curly-spacing": [ "off", "never" ], + "template-tag-spacing": "error", + "unicode-bom": [ + "error", + "never" + ], + "valid-jsdoc": "error", + "vars-on-top": "error", + "wrap-iife": "error", + "wrap-regex": "error", + "yield-star-spacing": "error", + "yoda": [ + "error", + "never" + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..725019d --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +/node_modules/ +/public/ +/rendered/build/ +/rendered/public/ + +.*.sw* +.DS_Store +*.sqlite3* +debug/ +static/thumbs +static/videos +secrets/* +coverage/ +.coverage +static/module +client/config.js +emails/config.js +media +tests/fixtures +rendered/wip +junk/ +static/images/sample_video.mp4 +static/js/webtorrent.debug.js diff --git a/README.md b/README.md index b9a76ec..fb2be46 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,61 @@ -# bandolier-website +# Introduction -This is the code that runs https://bandolier.learnjsthehardway.com/ for you to review. It uses the [bandolier-template](https://git.learnjsthehardway.com/learn-javascript-the-hard-way/bandolier-template) to create the documentation for the project. \ No newline at end of file +The Bandolier (aka `bando`) is an educational web framework featured in the [Learn JavaScript the Hard Way](https://learnjsthehardway.com) course. The Bandolier contains all of the features a full stack developer would need to learn, but with smaller easier to understand implementations that are fully visible in the project. It includes implementations of: + +* JSON API backends. +* Multi-page and Single-page web UIs. +* Queues for offloading processing. +* Video support with HLS, HTML, and WebTorrent Video. +* Built-in Database administration and a simple ORM. +* Authentication with passport. +* Websockets with socket.io. +* Pre-made CSS components and a simple CSS design method for non-designers. +* Unit testing and UI test automation. +* Automation commands to automate the boring tasks. +* Helpful video processing in JavaScript. +* Template generators to get started with code. +* Full but simple database administrator in the browser. +* Basic [Discord](https://discord.com) integration. +* Custom documentation generation for APIs using [acorn](https://github.com/acornjs/acorn). +* Includes common things you need like [lucide](lucide.dev) icons, Email DNS testing, web log analysis, in an easy to extend administrator tool. +* All implemented in reasonably sized pieces of code you can study on your own. + +You can think of `bando` as a belt full of simple useful web development code and practices that help you learn how to get things done. The idea is that everything in here is "similar" to features in other full stack web frameworks, but simplified so you can study them. Once you learn what's here you should be able to learn most other features in other frameworks. + +## Educational and Capable + +Even though The `bando` is designed to be studied it doesn't mean it's useless. It's taken from real code I use for all of my websites now, and contains nearly everything you'll find in most any other framework. It's designed to be as performant, secure, and simple as possible. While it might not have every feature conceivable, it does have the ones you need to make most websites. + +It also features a lot of [custom components](/client/#/bando/components/) that you don't find in other web frameworks. You'll find examples of handling [HLS Video Streaming](/client/#/bando/components/HLSVideo/), [Fast Blurred Image Loading](/client/#/bando/components/SnapImage/), [ffmpeg video compression](/client/#/docs/commands/convert.js), [Passport.js authentication](/client/#/docs/lib/auth.js), and much more. So while each feature doesn't cover every conceivable edge case, the framework does include a huge number of things everyone should learn for modern web development. + +## 80% Done For You + +A lot of the important things are also done for you while still letting you change them if you need to. For example, you shouldn't have to figure out password based authentication and encrypted password storage in 2023. So many other frameworks make people reinvent authentication when it's a completely solved problem and also a delicate thing to get right. In the `bando` authentication is already implemented and uses standard `Passport.js` with `bcrypt` passport storage, since that's the most recommended setup in 2023. If you want to use something else--say `scrypt`--then you can base your changes on my simple implementation and use the tests I have, rather than make everything from scratch. + +Another example is payments. The `bando` contains working production code for [Paypal](https://paypal.com), [Stripe](https://stripe.com), and [BTCPayServer](https://btcpayserver.org). If you want to support something else then it should be easy to study my implementations and then write your own. + +In general, the norm with `bando` is it contains most of the mundane things you might need to get started, and then replace later when you have a need for more features. + +## You Can Change or Remove Almost Everything + +The `bando` is designed for you to learn new technologies without having to create an entire web application from scratch. If you want to try [Actix](https://actix.rs) as a backend JSON server then just make it return the same JSON on the same URLs in `api/` and it should work. Don't like the ORM? You could probably replace it fairly easily. Want to learn how to use React? Just start your own React app in a new directory, and slowly bring over what you need from `client/` but in React form. Don't like my CSS? All of the HTML is very simple and semantic, so you can craft almost any classless CSS you want. Converting to something like [bootstrap](https://getbootstrap.com) would be some work, but you can use the `client/components` as a list of things to replicate in your version. Probably the most difficult thing to replace is the is the `client/` directory, since `admin/` and `rendered/` use code from `client/components`, but if you really want to learn a front-end framework then replicating all of the components in `client/components` would be an incredible way to learn. + +The reason this works is because the code in `api/` doesn't really depend on anything in `client/` or `admin/`. If it uses something in `queue/` it's through a library so you can replace it easily, or possibly even use the [Bull queue](https://github.com/OptimalBits/bull) from your favorite backend language. Bull uses redis, and you could probably replicate it. There's also a large test suite in `tests/` that you can keep running to make sure your changes are working. + +Finally, all of the code is reasonably sized. Most files are about 100 - 500 lines of code with not too much convolution or deep references. You could probably pick a random file and spend a few hours to study it. Many of the source files also teach a different technique. For example, the [client/fsm.js](/client/#/docs/client/fsm.js) file implements a simple Finite State Machine, which is used to make HLS video work in [client/components/HLSVideo.svelte](/client/#/bando/components/HLSVideo/). Then in [client/components/WTVideo.svelte](/client/#/bando/components/WTVideo/) there's more traditional callback style for handling WebTorrent videos so you can learn both techniques. + +Since all of this code is right there, and there's lots of tests, you can feel free to experiment while you study it. When you want to use it for something real, you can use what's there, and improve what you need for your application. + +## Current Status + +This is a first rough ALPHA release to get the project published and get some victi`^H^H^H^H^H`...users testing it and telling me how it works so far. You aren't expected to be able to figure it out since I haven't completely documented it, but you should feel free to explore the code, study what's there, and see what you can do. The next release will have reference documentation and more code cleaning, then after that videos demonstrating the important features and showing how to use the tools included. + +After that, further development will be focused on supporting the [Learn JavaScript the Hard Way](https://learnjsthehardway.com) course where students will use `bando` to create their own projects, and also learn how to implement the important elements on this stack. Once the course is done I'll start writing more public documentation for the framework as well as more demonstrations of using it to implement common websites. + +## About `bandolier-template` + +The [bandolier-template](https://git.learnjsthehardway.com/learn-javascript-the-hard-way/bandolier-template) is the template project that's checked out and configured when you run the `npx bando-up` command from [ljsthw-bandolier](https://git.learnjsthehardway.com/learn-javascript-the-hard-way/ljsthw-bandolier#ljsthw-bandolier). This is where the code really lives. The [Quick Start](/client/#/docs/quick-start/) will show you how to install everything and get a few first tasks done to test it out. + +## About `bandolier-website` + +Th [bandolier-website](https://git.learnjsthehardway.com/learn-javascript-the-hard-way/bandolier-website) repository is the code for the [bando.learnjsthehardway.com](https://bando.learnjsthehardway.com) website. This demonstration site allows access to some `/admin/` features such as documentation, routes browsing, and components browsing, but doesn't allow access to more sensitive things like the database. This is to demonstrate the split between `/client/` and `/admin/` for people curious about how they work. diff --git a/admin/App.svelte b/admin/App.svelte new file mode 100644 index 0000000..5ba87ea --- /dev/null +++ b/admin/App.svelte @@ -0,0 +1,13 @@ + + + + +{#if process.env.DANGER_ADMIN === "1"} + + +{/if} diff --git a/admin/Header.svelte b/admin/Header.svelte new file mode 100644 index 0000000..4eb2263 --- /dev/null +++ b/admin/Header.svelte @@ -0,0 +1,52 @@ + + +
+ +
diff --git a/admin/Layout.svelte b/admin/Layout.svelte new file mode 100644 index 0000000..482f641 --- /dev/null +++ b/admin/Layout.svelte @@ -0,0 +1,48 @@ + + +{#if authenticated || auth_optional} + {#if header} +
+ {/if} + + +
+ +
+
+ +
+
+ + {#if footer} +