├── .DS_Store ├── .github ├── FUNDING.yml └── workflows │ └── NPMBuild.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── components.json ├── composer.json ├── config └── config.php ├── eslint.config.js ├── jsconfig.json ├── package.json ├── phpunit.xml.dist ├── pint.json ├── postcss.config.js ├── public ├── .DS_Store ├── test-documents │ ├── onboarding-guide.pdf │ ├── product.jpg │ └── speaker-bios.docx └── vendor │ ├── .DS_Store │ └── mailweb │ ├── .vite │ └── manifest.json │ ├── mailweb.BnbzckCj.js │ └── mailweb.G9AMRQuM.css ├── resources ├── css │ └── app.css ├── js │ ├── Dashboard.vue │ ├── app.js │ ├── components │ │ ├── EmailAttachments.vue │ │ ├── EmailList.vue │ │ ├── EmailPreview.vue │ │ ├── Sidebar.vue │ │ ├── SidebarContent.vue │ │ ├── SlidingPanel.vue │ │ ├── icons │ │ │ └── Github.vue │ │ ├── partials │ │ │ ├── AnimatedSendButton.vue │ │ │ ├── AttachmentDialog.vue │ │ │ ├── DeleteEmailDialog.vue │ │ │ ├── SettingsDialog.vue │ │ │ └── ShareEmailDialog.vue │ │ └── ui │ │ │ ├── AttachmentIcon.vue │ │ │ ├── accordion │ │ │ ├── Accordion.vue │ │ │ ├── AccordionContent.vue │ │ │ ├── AccordionItem.vue │ │ │ ├── AccordionTrigger.vue │ │ │ └── index.ts │ │ │ ├── avatar │ │ │ ├── Avatar.vue │ │ │ ├── AvatarFallback.vue │ │ │ ├── AvatarImage.vue │ │ │ └── index.ts │ │ │ ├── badge │ │ │ ├── Badge.vue │ │ │ └── index.ts │ │ │ ├── button │ │ │ ├── Button.vue │ │ │ └── index.ts │ │ │ ├── dialog │ │ │ ├── Dialog.vue │ │ │ ├── DialogClose.vue │ │ │ ├── DialogContent.vue │ │ │ ├── DialogDescription.vue │ │ │ ├── DialogFooter.vue │ │ │ ├── DialogHeader.vue │ │ │ ├── DialogScrollContent.vue │ │ │ ├── DialogTitle.vue │ │ │ ├── DialogTrigger.vue │ │ │ └── index.ts │ │ │ ├── dropdown-menu │ │ │ ├── DropdownMenu.vue │ │ │ ├── DropdownMenuCheckboxItem.vue │ │ │ ├── DropdownMenuContent.vue │ │ │ ├── DropdownMenuGroup.vue │ │ │ ├── DropdownMenuItem.vue │ │ │ ├── DropdownMenuLabel.vue │ │ │ ├── DropdownMenuRadioGroup.vue │ │ │ ├── DropdownMenuRadioItem.vue │ │ │ ├── DropdownMenuSeparator.vue │ │ │ ├── DropdownMenuShortcut.vue │ │ │ ├── DropdownMenuSub.vue │ │ │ ├── DropdownMenuSubContent.vue │ │ │ ├── DropdownMenuSubTrigger.vue │ │ │ ├── DropdownMenuTrigger.vue │ │ │ └── index.ts │ │ │ ├── input │ │ │ ├── Input.vue │ │ │ └── index.ts │ │ │ ├── scroll-area │ │ │ ├── ScrollArea.vue │ │ │ ├── ScrollBar.vue │ │ │ └── index.ts │ │ │ ├── select │ │ │ ├── Select.vue │ │ │ ├── SelectContent.vue │ │ │ ├── SelectGroup.vue │ │ │ ├── SelectItem.vue │ │ │ ├── SelectItemText.vue │ │ │ ├── SelectLabel.vue │ │ │ ├── SelectScrollDownButton.vue │ │ │ ├── SelectScrollUpButton.vue │ │ │ ├── SelectSeparator.vue │ │ │ ├── SelectTrigger.vue │ │ │ ├── SelectValue.vue │ │ │ └── index.ts │ │ │ ├── separator │ │ │ ├── Separator.vue │ │ │ └── index.ts │ │ │ ├── sheet │ │ │ ├── Sheet.vue │ │ │ ├── SheetClose.vue │ │ │ ├── SheetContent.vue │ │ │ ├── SheetDescription.vue │ │ │ ├── SheetFooter.vue │ │ │ ├── SheetHeader.vue │ │ │ ├── SheetTitle.vue │ │ │ ├── SheetTrigger.vue │ │ │ └── index.ts │ │ │ ├── skeleton │ │ │ ├── Skeleton.vue │ │ │ └── index.ts │ │ │ ├── switch │ │ │ ├── Switch.vue │ │ │ └── index.ts │ │ │ ├── tabs │ │ │ ├── Tabs.vue │ │ │ ├── TabsContent.vue │ │ │ ├── TabsList.vue │ │ │ ├── TabsTrigger.vue │ │ │ └── index.ts │ │ │ └── tooltip │ │ │ ├── Tooltip.vue │ │ │ ├── TooltipContent.vue │ │ │ ├── TooltipProvider.vue │ │ │ ├── TooltipTrigger.vue │ │ │ └── index.ts │ ├── composables │ │ └── useMailwebConfig.ts │ ├── lib │ │ ├── utils.js │ │ └── utils.ts │ └── types │ │ └── email.ts └── views │ ├── dashboard.blade.php │ └── email-share.blade.php ├── src ├── Console │ └── Commands │ │ └── PruneMailwebMails.php ├── Facades │ └── MailWeb.php ├── Http │ ├── Controllers │ │ └── MailWebController.php │ ├── Listeners │ │ └── MailWebListener.php │ └── Models │ │ ├── MailwebEmail.php │ │ └── MailwebEmailAttachment.php ├── MailWebServiceProvider.php ├── Migrations │ ├── 0000_00_00_000000_create_mail_web_table.php │ ├── 0000_00_00_000001_alter_for_new_mail_web.php │ ├── 0000_00_00_000002_add_mail_web_attachment_table.php │ └── 0000_00_00_000003_add_size_to_mail_web_attachment_table.php ├── Notifications │ └── MailwebSampleNotification.php └── Providers │ └── MessageServiceProvider.php ├── tests ├── MailWebTestCase.php ├── Unit │ └── RouteTest.php └── factories │ └── UserFactory.php ├── tsconfig.json └── vite.config.js /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appoly/mail-web/7f337a2c7e9441503b09c1e1b79028a1b5d7d859/.DS_Store -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: appoly 2 | patreon: appoly 3 | -------------------------------------------------------------------------------- /.github/workflows/NPMBuild.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: NPMBuild 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the master branch 7 | on: 8 | push: 9 | branches: [ master ] 10 | pull_request: 11 | branches: [ master ] 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | 15 | jobs: 16 | npm-build: 17 | 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v2 22 | - name: Install Dependencies 23 | run: npm install 24 | - name: run prod 25 | run: npm run prod 26 | - name: Commit files 27 | continue-on-error: true 28 | run: | 29 | git config --local user.email "appoly@github.com" 30 | git config --local user.name "NPM Builder" 31 | git commit -m "npm run prod" -a 32 | - name: Push changes 33 | continue-on-error: true 34 | uses: ad-m/github-push-action@master 35 | with: 36 | github_token: ${{ secrets.GITHUB_TOKEN }} 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | composer.lock 3 | docs 4 | vendor 5 | coverage 6 | node_modules 7 | package-lock.json 8 | !/public/vendor 9 | /.idea 10 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | resources/js/components/ui/* 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "singleAttributePerLine": false, 5 | "htmlWhitespaceSensitivity": "css", 6 | "printWidth": 150, 7 | "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"], 8 | "tailwindFunctions": ["clsx", "cn"], 9 | "tabWidth": 4, 10 | "overrides": [ 11 | { 12 | "files": "**/*.yml", 13 | "options": { 14 | "tabWidth": 2 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[vue]": { 3 | "editor.defaultFormatter": "Vue.volar" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Select an email from the list to preview it
235 |Select an email from the list to preview it
267 |Failed to load emails
126 |{{ error.message }}
127 |No emails found
158 |