├── .envrc ├── .github ├── ISSUE_TEMPLATE └── workflows │ ├── create_release.yml │ └── test.yml ├── .gitignore ├── .php-cs-fixer.dist.php ├── .renovaterc.json ├── CHANGELOG.md ├── COPYING ├── Makefile ├── README.md ├── appinfo ├── info.xml ├── routes.php └── signature.json ├── composer.json ├── composer.lock ├── css ├── admin.css └── style.css ├── docker ├── Dockerfile ├── Makefile ├── README.md ├── docker-compose.yml ├── entrypoint.sh ├── justfile ├── nextcloud │ ├── certificates │ │ └── .gitkeep │ └── sign-app.sh └── webapppassword.config.php ├── docs ├── README.md ├── deployment.md ├── development.md └── example │ ├── Makefile │ ├── dist │ ├── dbp-file-source.js │ ├── dbp-file-source.js.map │ ├── local │ │ ├── dbp-common │ │ │ └── icons │ │ │ │ ├── close.svg │ │ │ │ ├── cloud.svg │ │ │ │ ├── empty-file.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── home.svg │ │ │ │ ├── laptop.svg │ │ │ │ ├── plus.svg │ │ │ │ └── reload.svg │ │ └── dbp-file-source │ │ │ └── tabulator-tables │ │ │ └── css │ │ │ ├── tabulator.min.css │ │ │ └── tabulator.min.css.map │ └── shared │ │ ├── file-source.07793cec.es.js │ │ ├── file-source.07793cec.es.js.map │ │ ├── jszip.0a4ba6fc.es.js │ │ └── jszip.0a4ba6fc.es.js.map │ ├── index.html │ ├── justfile │ └── src │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── lerna.json │ ├── package.json │ ├── packages │ ├── common │ │ ├── .eslintignore │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── LICENSE │ │ ├── README.md │ │ ├── assets │ │ │ ├── README.icons.md │ │ │ ├── icons │ │ │ │ ├── 500px.svg │ │ │ │ ├── add-file.svg │ │ │ │ ├── agenda.svg │ │ │ │ ├── alarm-clock.svg │ │ │ │ ├── alarm.svg │ │ │ │ ├── amazon-original.svg │ │ │ │ ├── amazon.svg │ │ │ │ ├── ambulance.svg │ │ │ │ ├── amex.svg │ │ │ │ ├── anchor.svg │ │ │ │ ├── android-original.svg │ │ │ │ ├── android.svg │ │ │ │ ├── angle-double-down.svg │ │ │ │ ├── angle-double-left.svg │ │ │ │ ├── angle-double-right.svg │ │ │ │ ├── angle-double-up.svg │ │ │ │ ├── apartment.svg │ │ │ │ ├── apple.svg │ │ │ │ ├── archive.svg │ │ │ │ ├── arrow-down-circle.svg │ │ │ │ ├── arrow-down.svg │ │ │ │ ├── arrow-left-circle.svg │ │ │ │ ├── arrow-left.svg │ │ │ │ ├── arrow-right-circle.svg │ │ │ │ ├── arrow-right.svg │ │ │ │ ├── arrow-top-left.svg │ │ │ │ ├── arrow-top-right.svg │ │ │ │ ├── arrow-up-circle.svg │ │ │ │ ├── arrow-up.svg │ │ │ │ ├── arrows-horizontal.svg │ │ │ │ ├── arrows-vertical.svg │ │ │ │ ├── backward.svg │ │ │ │ ├── baloon.svg │ │ │ │ ├── bar-chart.svg │ │ │ │ ├── basketball.svg │ │ │ │ ├── behance-original.svg │ │ │ │ ├── behance.svg │ │ │ │ ├── bi-cycle.svg │ │ │ │ ├── bitbucket.svg │ │ │ │ ├── bitcoin.svg │ │ │ │ ├── black-board.svg │ │ │ │ ├── blogger.svg │ │ │ │ ├── bluetooth.svg │ │ │ │ ├── bold.svg │ │ │ │ ├── bolt-alt.svg │ │ │ │ ├── bolt.svg │ │ │ │ ├── book.svg │ │ │ │ ├── bookmark-alt.svg │ │ │ │ ├── bookmark.svg │ │ │ │ ├── bootstrap.svg │ │ │ │ ├── brick.svg │ │ │ │ ├── bridge.svg │ │ │ │ ├── briefcase.svg │ │ │ │ ├── brush-alt.svg │ │ │ │ ├── brush.svg │ │ │ │ ├── bubble.svg │ │ │ │ ├── bug.svg │ │ │ │ ├── bulb.svg │ │ │ │ ├── bullhorn.svg │ │ │ │ ├── burger.svg │ │ │ │ ├── bus-alt.svg │ │ │ │ ├── bus.svg │ │ │ │ ├── cake.svg │ │ │ │ ├── calculator.svg │ │ │ │ ├── calendar.svg │ │ │ │ ├── camera.svg │ │ │ │ ├── candy-cane.svg │ │ │ │ ├── candy.svg │ │ │ │ ├── capsule.svg │ │ │ │ ├── car-alt.svg │ │ │ │ ├── car.svg │ │ │ │ ├── caravan.svg │ │ │ │ ├── cart-full.svg │ │ │ │ ├── cart.svg │ │ │ │ ├── certificate.svg │ │ │ │ ├── checkbox.svg │ │ │ │ ├── checkmark-circle.svg │ │ │ │ ├── chef-hat.svg │ │ │ │ ├── chevron-down-circle.svg │ │ │ │ ├── chevron-down.svg │ │ │ │ ├── chevron-left-circle.svg │ │ │ │ ├── chevron-left.svg │ │ │ │ ├── chevron-right-circle.svg │ │ │ │ ├── chevron-right.svg │ │ │ │ ├── chevron-up-circle.svg │ │ │ │ ├── chevron-up.svg │ │ │ │ ├── chrome.svg │ │ │ │ ├── circle-minus.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── close.svg │ │ │ │ ├── cloud-check.svg │ │ │ │ ├── cloud-download.svg │ │ │ │ ├── cloud-sync.svg │ │ │ │ ├── cloud-upload.svg │ │ │ │ ├── cloud.svg │ │ │ │ ├── cloudnetwork.svg │ │ │ │ ├── cloudy-sun.svg │ │ │ │ ├── code-alt.svg │ │ │ │ ├── code.svg │ │ │ │ ├── coffee-cup.svg │ │ │ │ ├── cog.svg │ │ │ │ ├── coin.svg │ │ │ │ ├── comments-alt.svg │ │ │ │ ├── comments-reply.svg │ │ │ │ ├── comments.svg │ │ │ │ ├── construction-hammer.svg │ │ │ │ ├── construction.svg │ │ │ │ ├── cool.svg │ │ │ │ ├── credit-cards.svg │ │ │ │ ├── crop.svg │ │ │ │ ├── cross-circle.svg │ │ │ │ ├── crown.svg │ │ │ │ ├── css.svg │ │ │ │ ├── cup.svg │ │ │ │ ├── customer.svg │ │ │ │ ├── cut.svg │ │ │ │ ├── dashboard.svg │ │ │ │ ├── database.svg │ │ │ │ ├── delivery.svg │ │ │ │ ├── diamond.svg │ │ │ │ ├── dinner.svg │ │ │ │ ├── direction-alt.svg │ │ │ │ ├── direction-ltr.svg │ │ │ │ ├── direction-rtl.svg │ │ │ │ ├── direction.svg │ │ │ │ ├── display-alt.svg │ │ │ │ ├── display.svg │ │ │ │ ├── dollar.svg │ │ │ │ ├── domain.svg │ │ │ │ ├── download.svg │ │ │ │ ├── dribbble.svg │ │ │ │ ├── drop.svg │ │ │ │ ├── dropbox-original.svg │ │ │ │ ├── dropbox.svg │ │ │ │ ├── drupal-original.svg │ │ │ │ ├── drupal.svg │ │ │ │ ├── dumbbell.svg │ │ │ │ ├── empty-file.svg │ │ │ │ ├── enter.svg │ │ │ │ ├── envato.svg │ │ │ │ ├── envelope.svg │ │ │ │ ├── eraser.svg │ │ │ │ ├── euro.svg │ │ │ │ ├── exit-down.svg │ │ │ │ ├── exit-up.svg │ │ │ │ ├── exit.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── facebook-filled.svg │ │ │ │ ├── facebook-messenger.svg │ │ │ │ ├── facebook-original.svg │ │ │ │ ├── facebook.svg │ │ │ │ ├── files.svg │ │ │ │ ├── firefox.svg │ │ │ │ ├── fireworks.svg │ │ │ │ ├── first-aid.svg │ │ │ │ ├── flag.svg │ │ │ │ ├── flags.svg │ │ │ │ ├── flickr.svg │ │ │ │ ├── flower.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── forward.svg │ │ │ │ ├── frame-expand.svg │ │ │ │ ├── fresh-juice.svg │ │ │ │ ├── friendly.svg │ │ │ │ ├── full screen.svg │ │ │ │ ├── funnel.svg │ │ │ │ ├── gallery.svg │ │ │ │ ├── game.svg │ │ │ │ ├── gift.svg │ │ │ │ ├── git.svg │ │ │ │ ├── github-original.svg │ │ │ │ ├── github.svg │ │ │ │ ├── google-plus-original.svg │ │ │ │ ├── google.svg │ │ │ │ ├── graduation.svg │ │ │ │ ├── grid-alt.svg │ │ │ │ ├── grid.svg │ │ │ │ ├── grow.svg │ │ │ │ ├── hammer.svg │ │ │ │ ├── hand.svg │ │ │ │ ├── handshake.svg │ │ │ │ ├── happy.svg │ │ │ │ ├── harddrive.svg │ │ │ │ ├── headphone-alt.svg │ │ │ │ ├── headphone.svg │ │ │ │ ├── heart-filled.svg │ │ │ │ ├── heart-monitor.svg │ │ │ │ ├── heart.svg │ │ │ │ ├── helicopter.svg │ │ │ │ ├── helmet.svg │ │ │ │ ├── help.svg │ │ │ │ ├── highlight-alt.svg │ │ │ │ ├── highlight.svg │ │ │ │ ├── home.svg │ │ │ │ ├── hospital.svg │ │ │ │ ├── hourglass.svg │ │ │ │ ├── html.svg │ │ │ │ ├── image.svg │ │ │ │ ├── inbox.svg │ │ │ │ ├── indent-decrease.svg │ │ │ │ ├── indent-increase.svg │ │ │ │ ├── infinite.svg │ │ │ │ ├── information.svg │ │ │ │ ├── instagram-filled.svg │ │ │ │ ├── instagram-original.svg │ │ │ │ ├── instagram.svg │ │ │ │ ├── invention.svg │ │ │ │ ├── invest-monitor.svg │ │ │ │ ├── investment.svg │ │ │ │ ├── island.svg │ │ │ │ ├── italic.svg │ │ │ │ ├── java.svg │ │ │ │ ├── joomla.svg │ │ │ │ ├── juice.svg │ │ │ │ ├── key.svg │ │ │ │ ├── keyboard.svg │ │ │ │ ├── keyword-research.svg │ │ │ │ ├── laptop-phone.svg │ │ │ │ ├── laptop.svg │ │ │ │ ├── layers.svg │ │ │ │ ├── layout.svg │ │ │ │ ├── leaf.svg │ │ │ │ ├── library.svg │ │ │ │ ├── licencse.svg │ │ │ │ ├── line-dashed.svg │ │ │ │ ├── line-dotted.svg │ │ │ │ ├── line-double.svg │ │ │ │ ├── line-spacing.svg │ │ │ │ ├── line.svg │ │ │ │ ├── lineicons-alt.svg │ │ │ │ ├── lineicons-original.svg │ │ │ │ ├── lineicons.svg │ │ │ │ ├── link.svg │ │ │ │ ├── linkedin-filled.svg │ │ │ │ ├── linkedin-original.svg │ │ │ │ ├── linkedin.svg │ │ │ │ ├── list.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── magnet.svg │ │ │ │ ├── magnifier.svg │ │ │ │ ├── map-marker.svg │ │ │ │ ├── map.svg │ │ │ │ ├── mashroom.svg │ │ │ │ ├── mastercard.svg │ │ │ │ ├── medall-alt.svg │ │ │ │ ├── medall.svg │ │ │ │ ├── medium.svg │ │ │ │ ├── megento.svg │ │ │ │ ├── menu.svg │ │ │ │ ├── mic.svg │ │ │ │ ├── microphone.svg │ │ │ │ ├── microscope.svg │ │ │ │ ├── microsoft.svg │ │ │ │ ├── minus.svg │ │ │ │ ├── mobile.svg │ │ │ │ ├── money-location.svg │ │ │ │ ├── money-protection.svg │ │ │ │ ├── more-filled.svg │ │ │ │ ├── more.svg │ │ │ │ ├── mouse.svg │ │ │ │ ├── move.svg │ │ │ │ ├── music.svg │ │ │ │ ├── mute.svg │ │ │ │ ├── na.svg │ │ │ │ ├── network.svg │ │ │ │ ├── neutral.svg │ │ │ │ ├── night.svg │ │ │ │ ├── notepad.svg │ │ │ │ ├── offer.svg │ │ │ │ ├── package.svg │ │ │ │ ├── page-break.svg │ │ │ │ ├── pagination.svg │ │ │ │ ├── paint-bucket.svg │ │ │ │ ├── paint-roller.svg │ │ │ │ ├── pallet.svg │ │ │ │ ├── panel.svg │ │ │ │ ├── paper-clip.svg │ │ │ │ ├── pause.svg │ │ │ │ ├── paypal-original.svg │ │ │ │ ├── paypal.svg │ │ │ │ ├── pencil-alt.svg │ │ │ │ ├── pencil.svg │ │ │ │ ├── phone-handset.svg │ │ │ │ ├── phone.svg │ │ │ │ ├── pie-chart.svg │ │ │ │ ├── pilcrow.svg │ │ │ │ ├── pin-alt.svg │ │ │ │ ├── pin.svg │ │ │ │ ├── pinterest.svg │ │ │ │ ├── pizza.svg │ │ │ │ ├── plane.svg │ │ │ │ ├── play.svg │ │ │ │ ├── playstore.svg │ │ │ │ ├── plug.svg │ │ │ │ ├── plus.svg │ │ │ │ ├── pointer-down.svg │ │ │ │ ├── pointer-left.svg │ │ │ │ ├── pointer-right.svg │ │ │ │ ├── pointer-up.svg │ │ │ │ ├── pointer.svg │ │ │ │ ├── popup.svg │ │ │ │ ├── postcard.svg │ │ │ │ ├── pound.svg │ │ │ │ ├── power-switch.svg │ │ │ │ ├── printer.svg │ │ │ │ ├── producthunt.svg │ │ │ │ ├── protection.svg │ │ │ │ ├── pulse.svg │ │ │ │ ├── pyramids.svg │ │ │ │ ├── question-circle.svg │ │ │ │ ├── quora.svg │ │ │ │ ├── quotation.svg │ │ │ │ ├── radio-button.svg │ │ │ │ ├── rain.svg │ │ │ │ ├── reddit.svg │ │ │ │ ├── reload.svg │ │ │ │ ├── remove-file.svg │ │ │ │ ├── reply.svg │ │ │ │ ├── restaurant.svg │ │ │ │ ├── revenue.svg │ │ │ │ ├── road.svg │ │ │ │ ├── rocket.svg │ │ │ │ ├── rss-feed.svg │ │ │ │ ├── ruler-alt.svg │ │ │ │ ├── ruler-pencil.svg │ │ │ │ ├── ruler.svg │ │ │ │ ├── rupee.svg │ │ │ │ ├── sad.svg │ │ │ │ ├── save.svg │ │ │ │ ├── school-bench-alt.svg │ │ │ │ ├── school-bench.svg │ │ │ │ ├── school-compass.svg │ │ │ │ ├── scooter.svg │ │ │ │ ├── scroll-down.svg │ │ │ │ ├── search.svg │ │ │ │ ├── select.svg │ │ │ │ ├── seo-consulting.svg │ │ │ │ ├── seo-monitoring.svg │ │ │ │ ├── seo.svg │ │ │ │ ├── service.svg │ │ │ │ ├── share-alt.svg │ │ │ │ ├── share.svg │ │ │ │ ├── shield.svg │ │ │ │ ├── shift-left.svg │ │ │ │ ├── shift-right.svg │ │ │ │ ├── ship.svg │ │ │ │ ├── shopify.svg │ │ │ │ ├── shopping-basket.svg │ │ │ │ ├── shortcode.svg │ │ │ │ ├── shovel.svg │ │ │ │ ├── shuffle.svg │ │ │ │ ├── signal.svg │ │ │ │ ├── skipping-rope.svg │ │ │ │ ├── skype.svg │ │ │ │ ├── slack.svg │ │ │ │ ├── slice.svg │ │ │ │ ├── slideshare.svg │ │ │ │ ├── slim.svg │ │ │ │ ├── smile.svg │ │ │ │ ├── snapchat.svg │ │ │ │ ├── sort-alpha-asc.svg │ │ │ │ ├── sort-amount-asc.svg │ │ │ │ ├── souncloud-original.svg │ │ │ │ ├── soundcloud.svg │ │ │ │ ├── spell-check.svg │ │ │ │ ├── spinner-arrow.svg │ │ │ │ ├── spinner-solid.svg │ │ │ │ ├── spinner.svg │ │ │ │ ├── spotify-original.svg │ │ │ │ ├── spotify.svg │ │ │ │ ├── spray.svg │ │ │ │ ├── sprout.svg │ │ │ │ ├── stackoverflow.svg │ │ │ │ ├── stamp.svg │ │ │ │ ├── star-empty.svg │ │ │ │ ├── star-filled.svg │ │ │ │ ├── star-half.svg │ │ │ │ ├── star.svg │ │ │ │ ├── stats-down.svg │ │ │ │ ├── stats-up.svg │ │ │ │ ├── steam.svg │ │ │ │ ├── stethoscope.svg │ │ │ │ ├── stop.svg │ │ │ │ ├── strikethrough.svg │ │ │ │ ├── stripe.svg │ │ │ │ ├── sun.svg │ │ │ │ ├── support.svg │ │ │ │ ├── surfboard.svg │ │ │ │ ├── suspect.svg │ │ │ │ ├── syringe.svg │ │ │ │ ├── t-shirt.svg │ │ │ │ ├── tab.svg │ │ │ │ ├── tag.svg │ │ │ │ ├── target-audience.svg │ │ │ │ ├── target-revenue.svg │ │ │ │ ├── target.svg │ │ │ │ ├── taxi.svg │ │ │ │ ├── teabag.svg │ │ │ │ ├── telegram.svg │ │ │ │ ├── text-allign-center.svg │ │ │ │ ├── text-allign-justify.svg │ │ │ │ ├── text-allign-left.svg │ │ │ │ ├── text-allign-right.svg │ │ │ │ ├── text-format-remove.svg │ │ │ │ ├── text-format.svg │ │ │ │ ├── text-size.svg │ │ │ │ ├── thought.svg │ │ │ │ ├── thumbs-down.svg │ │ │ │ ├── thumbs-up.svg │ │ │ │ ├── thunder-alt.svg │ │ │ │ ├── thunder.svg │ │ │ │ ├── ticket.svg │ │ │ │ ├── ticketalt.svg │ │ │ │ ├── timer.svg │ │ │ │ ├── tounge.svg │ │ │ │ ├── train-alt.svg │ │ │ │ ├── train.svg │ │ │ │ ├── trash.svg │ │ │ │ ├── travel.svg │ │ │ │ ├── tree.svg │ │ │ │ ├── trees.svg │ │ │ │ ├── trowel.svg │ │ │ │ ├── twitch.svg │ │ │ │ ├── twitter-filled.svg │ │ │ │ ├── twitter-original.svg │ │ │ │ ├── twitter.svg │ │ │ │ ├── underline.svg │ │ │ │ ├── unlink.svg │ │ │ │ ├── unlock.svg │ │ │ │ ├── upload.svg │ │ │ │ ├── user.svg │ │ │ │ ├── users.svg │ │ │ │ ├── ux.svg │ │ │ │ ├── vector.svg │ │ │ │ ├── video.svg │ │ │ │ ├── vimeo.svg │ │ │ │ ├── visa.svg │ │ │ │ ├── vk.svg │ │ │ │ ├── volume-high.svg │ │ │ │ ├── volume-low.svg │ │ │ │ ├── volume-medium.svg │ │ │ │ ├── volume.svg │ │ │ │ ├── wallet.svg │ │ │ │ ├── warning.svg │ │ │ │ ├── website.svg │ │ │ │ ├── wechat.svg │ │ │ │ ├── weight.svg │ │ │ │ ├── whatsapp.svg │ │ │ │ ├── wheelbarrow.svg │ │ │ │ ├── wheelchair.svg │ │ │ │ ├── windows.svg │ │ │ │ ├── wordpress-filled.svg │ │ │ │ ├── wordpress.svg │ │ │ │ ├── world.svg │ │ │ │ ├── write.svg │ │ │ │ ├── yahoo.svg │ │ │ │ ├── ycombinator.svg │ │ │ │ ├── yen.svg │ │ │ │ ├── youtube.svg │ │ │ │ ├── zip.svg │ │ │ │ ├── zoom-in.svg │ │ │ │ └── zoom-out.svg │ │ │ └── index.html │ │ ├── dbp-common-demo.js │ │ ├── dbp-lit-element.js │ │ ├── demo.js │ │ ├── error.js │ │ ├── errorreport.js │ │ ├── i18n.js │ │ ├── i18n │ │ │ ├── de │ │ │ │ └── translation.json │ │ │ └── en │ │ │ │ └── translation.json │ │ ├── i18next.js │ │ ├── index.js │ │ ├── jsonld.js │ │ ├── karma.conf.js │ │ ├── misc │ │ │ └── browser-check.js │ │ ├── notification.js │ │ ├── package.json │ │ ├── rollup.config.js │ │ ├── src │ │ │ ├── abort.js │ │ │ ├── button.js │ │ │ ├── eventbus.js │ │ │ ├── icon.js │ │ │ ├── mini-spinner.js │ │ │ └── spinner.js │ │ ├── styles.js │ │ ├── test │ │ │ ├── abort.js │ │ │ ├── eventbus.js │ │ │ ├── i18next.js │ │ │ └── unit.js │ │ └── utils.js │ └── file-handling │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── assets │ │ ├── favicon.ico │ │ └── index.html │ │ ├── i18next-scanner.config.js │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── rollup.config.js │ │ ├── src │ │ ├── dbp-file-sink.js │ │ ├── dbp-file-source.js │ │ ├── dbp-nextcloud-file-picker.js │ │ ├── demo.js │ │ ├── file-sink.js │ │ ├── file-source.js │ │ ├── i18n.js │ │ ├── i18n │ │ │ ├── de │ │ │ │ └── translation.json │ │ │ └── en │ │ │ │ └── translation.json │ │ ├── index.js │ │ ├── micromodal.es.js │ │ └── styles.js │ │ ├── test │ │ └── unit.js │ │ └── yarn-error.log │ ├── rollup.utils.js │ └── yarn.lock ├── flake.lock ├── flake.nix ├── img ├── app-dark.svg └── app.svg ├── js ├── admin.js └── script.js ├── justfile ├── l10n ├── de.js └── de.json ├── lib ├── AppInfo │ └── Application.php ├── Config │ └── Config.php ├── Connector │ └── Sabre │ │ └── CorsPlugin.php ├── Controller │ ├── AccessControl.php │ ├── AdminController.php │ ├── PageController.php │ ├── PreviewController.php │ └── ShareAPIController.php └── Settings │ ├── Admin.php │ └── Section.php ├── phpstan.neon ├── phpunit.integration.xml ├── phpunit.xml ├── psalm.xml ├── screenshot-filepicker.png ├── screenshot-webdav.png ├── screenshot.png ├── scripts └── pre-commit.sh ├── shell.nix ├── templates ├── admin.php └── index.php ├── term.kdl ├── tests ├── Integration │ └── AppTest.php ├── Unit │ └── Controller │ │ └── PageControllerTest.php └── bootstrap.php ├── translationfiles ├── de │ └── webapppassword.po └── templates │ └── webapppassword.pot └── treefmt.toml /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE: -------------------------------------------------------------------------------- 1 | ## Explain the Problem 2 | What problem did you encounter? 3 | 4 | ## Steps to Reproduce 5 | Explain what you did to encounter the issue 6 | 1. 7 | 2. 8 | 3. 9 | 10 | ## System Information 11 | * WebAppPassword app version: 12 | * Nextcloud version: 13 | * Cron type: 14 | * PHP version: 15 | * Database and version: 16 | * Browser and version: 17 | * Distribution and version: 18 | 19 | ## Contents of nextcloud/data/nextcloud.log 20 | 21 | ```json 22 | 23 | Paste output here 24 | 25 | ``` 26 | 27 | ## Contents of Browser Error Console 28 | Read http://ggnome.com/wiki/Using_The_Browser_Error_Console if you are unsure what to put here 29 | 30 | ``` 31 | 32 | Paste output here 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | vendor 3 | *.phar 4 | docker/nextcloud/certificates/webapppassword.* 5 | *.gz 6 | *.db* 7 | /*.cache 8 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | getFinder() 12 | ->ignoreVCSIgnored(true) 13 | ->notPath('build') 14 | ->notPath('vendor') 15 | ->in(__DIR__); 16 | return $config; 17 | -------------------------------------------------------------------------------- /.renovaterc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base", 4 | "group:allNonMajor", 5 | "schedule:weekends", 6 | ":automergePatch" 7 | ], 8 | "ignorePresets": [":prHourlyLimit2"], 9 | "rangeStrategy": "update-lockfile", 10 | "lockFileMaintenance": { 11 | "enabled": true 12 | }, 13 | "js": { 14 | "enabled": false 15 | }, 16 | "packageRules": [ 17 | { 18 | "matchPackageNames": ["phpunit/phpunit"], 19 | "allowedVersions": "<10" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /css/admin.css: -------------------------------------------------------------------------------- 1 | #webapppassword-saved-message { 2 | display: none; 3 | } 4 | 5 | #webapppassword-saved-message.show { 6 | display: inline-block; 7 | } 8 | 9 | #webapppassword-origins { 10 | width: 100%; 11 | } 12 | 13 | #files-sharing-webapppassword-origins { 14 | width: 100%; 15 | } 16 | 17 | #preview-webapppassword-origins { 18 | width: 100%; 19 | } 20 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | #app-content { 2 | height: 100%; 3 | width: 100%; 4 | display: flex; 5 | position: fixed; 6 | align-items: center; 7 | justify-content: center; 8 | } -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use this if there is a release image 2 | #FROM nextcloud:27-apache 3 | #FROM nextcloud:28-apache 4 | #FROM nextcloud:29-apache 5 | #FROM nextcloud:30-apache 6 | FROM nextcloud:31-apache 7 | 8 | # Use this if there is no release image yet 9 | # https://github.com/digital-blueprint/nextcloud-docker/pkgs/container/nextcloud-docker-pre-apache 10 | # https://github.com/digital-blueprint/nextcloud-docker/tree/pre-release 11 | #FROM ghcr.io/digital-blueprint/nextcloud-docker-pre-apache:latest 12 | 13 | COPY entrypoint.sh / 14 | 15 | RUN deluser www-data 16 | RUN useradd -u 1000 -ms /bin/bash www-data 17 | RUN usermod -a -G www-data www-data 18 | RUN mkdir /var/www/deploy 19 | -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | # Nextcloud Development Environment 2 | 3 | ## Installation / Running 4 | 5 | ```bash 6 | docker-compose up 7 | ``` 8 | 9 | Afterward you should be able to open (admin/admin) to 10 | log in to your Nextcloud instance. 11 | 12 | ## Check nextcloud.log 13 | 14 | For debugging, you can show the `nextcloud.log`: 15 | 16 | ```bash 17 | make show-log 18 | ``` 19 | 20 | There also is a [loggin web interface](http://localhost:8081/index.php/settings/admin/logging). 21 | 22 | ## Tip 23 | 24 | In case something is broken try to reset the container: 25 | 26 | ```bash 27 | docker-compose build; docker-compose down; docker volume prune -f 28 | ``` 29 | -------------------------------------------------------------------------------- /docker/docker-compose.yml: -------------------------------------------------------------------------------- 1 | name: "nextcloud-webapppassword" 2 | 3 | services: 4 | app: 5 | build: . 6 | ports: 7 | - 8081:80 8 | environment: 9 | - WEBPASSWORD_ORIGINS=http://127.0.0.1:8001,http://localhost:8001,http://localhost:8082,http://bs-local.com:8001 10 | - NEXTCLOUD_ADMIN_USER=admin 11 | - NEXTCLOUD_ADMIN_PASSWORD=admin 12 | - SQLITE_DATABASE=mydb 13 | - NEXTCLOUD_TRUSTED_DOMAINS=bs-local.com localhost 127.0.0.1 14 | volumes: 15 | - nextcloud:/var/www/html 16 | - ..:/var/www/html/custom_apps/webapppassword 17 | - ./nextcloud/certificates:/var/www/.nextcloud/certificates 18 | - ./nextcloud/sign-app.sh:/var/www/sign-app.sh 19 | - ./webapppassword.config.php:/var/www/html/config/webapppassword.config.php 20 | 21 | volumes: 22 | nextcloud: 23 | -------------------------------------------------------------------------------- /docker/nextcloud/certificates/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docker/webapppassword.config.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/empty-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/laptop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/dist/local/dbp-common/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/justfile: -------------------------------------------------------------------------------- 1 | # Use `just ` to run a recipe 2 | # https://just.systems/man/en/ 3 | 4 | # By default, run the `--list` command 5 | default: 6 | @just --list 7 | 8 | # Variables 9 | serveLocation := "localhost:8001" 10 | 11 | # Serve the WebAppPassword Demo at http://localhost:8001 12 | serve: 13 | -pkill -f "php -S {{ serveLocation }}" 14 | php -S {{ serveLocation }} 15 | 16 | # Open the browser with the WebAppPassword Demo 17 | [group('dev')] 18 | open-browser: 19 | xdg-open http://{{ serveLocation }} 20 | -------------------------------------------------------------------------------- /docs/example/src/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | demo/dist 3 | .idea -------------------------------------------------------------------------------- /docs/example/src/README.md: -------------------------------------------------------------------------------- 1 | # Frontend Toolkit - file-handling 2 | 3 | ## Setup 4 | 5 | ``` 6 | yarn install 7 | ``` 8 | 9 | `cd packages/file-handling` and continue development with `yarn run watch` or `yarn run build` for builing the package 10 | 11 | ## Other commands 12 | 13 | - `yarn run test` - Run test for all packages 14 | - `yarn run clean` - Removes all `node_modules` directories. 15 | -------------------------------------------------------------------------------- /docs/example/src/lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": ["packages/*"], 3 | "npmClient": "yarn", 4 | "version": "independent", 5 | "useWorkspaces": true 6 | } 7 | -------------------------------------------------------------------------------- /docs/example/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dbp-toolkit", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "private": true, 7 | "workspaces": [ 8 | "packages/*" 9 | ], 10 | "scripts": { 11 | "test": "lerna run test" 12 | }, 13 | "author": "", 14 | "license": "LGPL-2.1-or-later", 15 | "devDependencies": { 16 | "lerna": "^3.22.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/.eslintignore: -------------------------------------------------------------------------------- 1 | /vendor/** 2 | /dist/** 3 | *.conf.js 4 | *.config.js -------------------------------------------------------------------------------- /docs/example/src/packages/common/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "mocha": true 6 | }, 7 | "globals": { 8 | "Atomics": "readonly", 9 | "SharedArrayBuffer": "readonly" 10 | }, 11 | "parser": "babel-eslint", 12 | "parserOptions": { 13 | "ecmaVersion": 2018, 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-unused-vars": ["error", { "args": "none" }], 18 | "semi": [2, "always"], 19 | "jsdoc/require-jsdoc": 0, 20 | "jsdoc/require-param-description": 0, 21 | "jsdoc/require-returns": 0, 22 | "jsdoc/require-returns-description": 0, 23 | "jsdoc/require-param-type": 0 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .idea 4 | npm-debug.log 5 | package-lock.json 6 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-blueprint/webapppassword/a5e4ab0ea88fec87f7e3dcb8ffc829e2df0d4731/docs/example/src/packages/common/.gitmodules -------------------------------------------------------------------------------- /docs/example/src/packages/common/README.md: -------------------------------------------------------------------------------- 1 | # Common Code 2 | 3 | [GitLab Repository](https://gitlab.tugraz.at/dbp/web-components/Common) 4 | 5 | ## Icon Web Component 6 | 7 | For valid icon names see: [LineIcons](https://lineicons.com/icons/) 8 | 9 | ```html 10 | 11 | ``` 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/README.icons.md: -------------------------------------------------------------------------------- 1 | # Icons 2 | 3 | - Source: https://lineicons.com/icons/ 4 | - Flattened using `mkdir icons; cp ./*/*.svg ./icons` 5 | - License: https://creativecommons.org/licenses/by-sa/4.0/ 6 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/add-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/agenda.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/angle-double-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/angle-double-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/angle-double-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/angle-double-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/archive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-down-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-left-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-right-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-top-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-top-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-up-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrows-horizontal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/arrows-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/backward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bar-chart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/black-board.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bolt-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bolt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/book.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bookmark-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/brick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bridge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/briefcase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/brush-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/bubble.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/capsule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/checkbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/checkmark-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chef-hat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-down-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-left-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-right-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-up-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/chevron-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/circle-minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/clipboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/construction-hammer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/credit-cards.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/crop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/cross-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/crown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/diamond.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/direction.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/display-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/display.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/dollar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/drop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/dropbox-original.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/empty-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/enter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/envato.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/envelope.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/exit-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/exit-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/exit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/eye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/facebook-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/facebook-messenger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/facebook-original.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/files.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/first-aid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/flickr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/friendly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/full screen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/funnel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/git.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/google.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/graduation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/hammer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/happy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/headphone-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/headphone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/heart-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/helmet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/highlight-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/highlight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/inbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/information.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/juice.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/laptop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/layout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/line-dashed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/line-dotted.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/line-double.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/linkedin-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/linkedin-original.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/map-marker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/mastercard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/megento.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/mic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/microsoft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/more-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/mouse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/na.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/neutral.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/notepad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/package.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/paint-bucket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/paint-roller.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pie-chart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pilcrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/playstore.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/plug.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pointer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pound.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/power-switch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/producthunt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/protection.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pulse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/pyramids.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/remove-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/ruler.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/rupee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/sad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/school-bench.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/service.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/share-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/shield.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/shift-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/shift-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/shuffle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/slice.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/smile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/spell-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/spinner-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/spinner-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/stackoverflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/stamp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/star-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/stats-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/stats-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/strikethrough.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/suspect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/t-shirt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-allign-center.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-allign-justify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-allign-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-allign-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-format.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/text-size.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/tree.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/trowel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/twitch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/twitter-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/twitter-original.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/underline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/upload.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/vimeo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/volume-low.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/volume.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/wallet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/wheelbarrow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | Layer 1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/world.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/ycombinator.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/yen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/zoom-in.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/icons/zoom-out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/dbp-lit-element.js: -------------------------------------------------------------------------------- 1 | import {LitElement} from "lit-element"; 2 | 3 | export default class DBPLitElement extends LitElement { 4 | _(selector) { 5 | return this.shadowRoot === null ? this.querySelector(selector) : this.shadowRoot.querySelector(selector); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/demo.js: -------------------------------------------------------------------------------- 1 | import './dbp-common-demo.js'; -------------------------------------------------------------------------------- /docs/example/src/packages/common/i18n.js: -------------------------------------------------------------------------------- 1 | import {createInstance} from './i18next.js'; 2 | 3 | import de from './i18n/de/translation.json'; 4 | import en from './i18n/en/translation.json'; 5 | 6 | export const i18n = createInstance({en: en, de: de}, 'de', 'en'); -------------------------------------------------------------------------------- /docs/example/src/packages/common/i18n/de/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "summary": "Ein Fehler ist aufgetreten", 4 | "connection-to-server-refused": "Verbindungs zum Server verweigert!" 5 | }, 6 | "jsonld": { 7 | "error-api-server": "Verbindung zum API Server {{apiUrl}} fehlgeschlagen!", 8 | "error-hydra-documentation-url-not-set": "Hydra apiDocumentation URL wurden für server {{apiUrl}} nicht gesetzt!", 9 | "api-documentation-server": "Verbindung zum apiDocumentation API Server {{apiDocUrl}} fehlgeschlagen!" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/i18n/en/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "summary": "An error occurred", 4 | "connection-to-server-refused": "Connection to server refused!" 5 | }, 6 | "jsonld": { 7 | "error-api-server": "Connection to api server {{apiUrl}} failed!", 8 | "error-hydra-documentation-url-not-set": "Hydra apiDocumentation url was not set for server {{apiUrl}}!", 9 | "api-documentation-server": "Connection to apiDocumentation server {{apiDocUrl}} failed!" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/index.js: -------------------------------------------------------------------------------- 1 | import {EventBus} from './src/eventbus.js'; 2 | import {createLinkedAbortController, createTimeoutAbortSignal} from './src/abort.js'; 3 | import {getIconSVGURL, getIconCSS, Icon} from './src/icon.js'; 4 | import {MiniSpinner} from './src/mini-spinner.js'; 5 | import {Button} from './src/button.js'; 6 | import {Spinner} from './src/spinner.js'; 7 | 8 | export {EventBus, createLinkedAbortController, createTimeoutAbortSignal}; 9 | export {getIconSVGURL, getIconCSS, Icon}; 10 | export {MiniSpinner}; 11 | export {Button}; 12 | export {Spinner}; -------------------------------------------------------------------------------- /docs/example/src/packages/common/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Trick to use the auto-downloaded puppeteer chrome binary 2 | process.env.CHROME_BIN = require('puppeteer').executablePath(); 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | basePath: 'dist', 7 | frameworks: ['mocha'], 8 | client: { 9 | mocha: { 10 | ui: 'tdd', 11 | }, 12 | }, 13 | files: [ 14 | {pattern: './*.js', included: true, watched: true, served: true, type: 'module'}, 15 | {pattern: './**/*', included: false, watched: true, served: true}, 16 | ], 17 | autoWatch: true, 18 | browsers: ['ChromeHeadlessNoSandbox', 'FirefoxHeadless'], 19 | customLaunchers: { 20 | ChromeHeadlessNoSandbox: { 21 | base: 'ChromeHeadless', 22 | flags: ['--no-sandbox'] 23 | } 24 | }, 25 | singleRun: false, 26 | logLevel: config.LOG_ERROR 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/notification.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sends a notification via the event 3 | * 4 | * Type can be info/success/warning/danger 5 | * 6 | * example options: 7 | * 8 | * { 9 | * "summary": "Item deleted", 10 | * "body": "Item foo was deleted!", 11 | * "type": "info", 12 | * "timeout": 5, 13 | * } 14 | * 15 | * @param options 16 | */ 17 | function send(options) { 18 | const event = new CustomEvent("dbp-notification-send", { 19 | bubbles: true, 20 | cancelable: true, 21 | detail: options, 22 | }); 23 | 24 | const result = window.dispatchEvent(event); 25 | 26 | // true means the event was not handled 27 | if (result) { 28 | alert((options.summary !== undefined && options.summary !== "" ? options.summary + ": " : "") + options.body); 29 | console.log("Use the web component dbp-notification to show fancy notifications."); 30 | } 31 | } 32 | 33 | export { send }; 34 | -------------------------------------------------------------------------------- /docs/example/src/packages/common/test/abort.js: -------------------------------------------------------------------------------- 1 | import {assert} from 'chai'; 2 | import {createLinkedAbortController, createTimeoutAbortSignal} from '../src/abort.js'; 3 | 4 | suite('abort', () => { 5 | test('createLinkedAbortController', () => { 6 | let c1 = new AbortController(); 7 | let c2 = new AbortController(); 8 | const linked = createLinkedAbortController(c1.signal, c2.signal); 9 | assert.isFalse(linked.signal.aborted); 10 | c1.abort(); 11 | assert.isTrue(linked.signal.aborted); 12 | c1.abort(); 13 | linked.abort(); 14 | }); 15 | 16 | test('createTimeoutAbortSignal', () => { 17 | const signal = createTimeoutAbortSignal(10000000); 18 | assert.isFalse(signal.aborted); 19 | }); 20 | }); -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .idea 4 | npm-debug.log 5 | package-lock.json 6 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-blueprint/webapppassword/a5e4ab0ea88fec87f7e3dcb8ffc829e2df0d4731/docs/example/src/packages/file-handling/assets/favicon.ico -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/i18next-scanner.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | input: [ 3 | 'src/*.js', 4 | ], 5 | output: './', 6 | options: { 7 | debug: false, 8 | removeUnusedKeys: true, 9 | lngs: ['en','de'], 10 | resource: { 11 | loadPath: 'src/i18n/{{lng}}/{{ns}}.json', 12 | savePath: 'src/i18n/{{lng}}/{{ns}}.json' 13 | }, 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Trick to use the auto-downloaded puppeteer chrome binary 2 | process.env.CHROME_BIN = require('puppeteer').executablePath(); 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | basePath: 'dist', 7 | frameworks: ['mocha', 'chai'], 8 | files: [ 9 | {pattern: './*.js', included: true, watched: true, served: true, type: 'module'}, 10 | {pattern: './**/*', included: false, watched: true, served: true}, 11 | ], 12 | autoWatch: true, 13 | browsers: ['ChromeHeadlessNoSandbox'], 14 | customLaunchers: { 15 | ChromeHeadlessNoSandbox: { 16 | base: 'ChromeHeadless', 17 | flags: ['--no-sandbox'] 18 | } 19 | }, 20 | singleRun: false, 21 | logLevel: config.LOG_ERROR 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/src/dbp-file-sink.js: -------------------------------------------------------------------------------- 1 | import * as commonUtils from "dbp-common/utils"; 2 | import {FileSink} from './file-sink'; 3 | 4 | commonUtils.defineCustomElement('dbp-file-sink', FileSink); 5 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/src/dbp-file-source.js: -------------------------------------------------------------------------------- 1 | import * as commonUtils from "dbp-common/utils"; 2 | import {FileSource} from './file-source'; 3 | 4 | commonUtils.defineCustomElement('dbp-file-source', FileSource); 5 | -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/src/i18n.js: -------------------------------------------------------------------------------- 1 | import {createInstance} from 'dbp-common/i18next.js'; 2 | 3 | import de from './i18n/de/translation.json'; 4 | import en from './i18n/en/translation.json'; 5 | 6 | export const i18n = createInstance({en: en, de: de}, 'de', 'en'); -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/src/index.js: -------------------------------------------------------------------------------- 1 | export {FileSource} from './file-source'; 2 | export {FileSink} from './file-sink'; -------------------------------------------------------------------------------- /docs/example/src/packages/file-handling/test/unit.js: -------------------------------------------------------------------------------- 1 | import '../src/dbp-file-source'; 2 | import '../src/demo'; 3 | 4 | describe('dbp-file-source basics', () => { 5 | let node; 6 | 7 | beforeEach(async () => { 8 | node = document.createElement('dbp-file-source'); 9 | document.body.appendChild(node); 10 | await node.updateComplete; 11 | }); 12 | 13 | afterEach(() => { 14 | node.remove(); 15 | }); 16 | 17 | it('should render', () => { 18 | expect(node).to.have.property('shadowRoot'); 19 | }); 20 | }); 21 | 22 | describe('dbp-file-source demo', () => { 23 | let node; 24 | 25 | beforeEach(async () => { 26 | node = document.createElement('dbp-file-source-demo'); 27 | document.body.appendChild(node); 28 | await node.updateComplete; 29 | }); 30 | 31 | afterEach(() => { 32 | node.remove(); 33 | }); 34 | 35 | it('should render', () => { 36 | expect(node).to.have.property('shadowRoot'); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1742669843, 6 | "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "1e5b653dff12029333a6546c11e108ede13052eb", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "NixOS", 14 | "ref": "nixos-unstable", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /js/script.js: -------------------------------------------------------------------------------- 1 | 2 | const apiUrl = OC.generateUrl('/apps/webapppassword/create'); 3 | const url = new URL(window.location.href); 4 | const targetOrigin = decodeURIComponent(url.searchParams.get('target-origin')); 5 | 6 | fetch(apiUrl, { 7 | method: 'POST', 8 | headers: { 9 | 'target-origin': targetOrigin, 10 | 'requesttoken': OC.requestToken 11 | } 12 | }) 13 | .then(response => response.json()) 14 | .then((data) => { 15 | // console.log("data", data); 16 | const message = {"type": "webapppassword", "loginName": data.loginName, "token": data.token, "webdavUrl": data.webdavUrl}; 17 | window.opener.postMessage(message, targetOrigin); 18 | // console.log("targetOrigin", targetOrigin); 19 | // console.log("message", message); 20 | }); 21 | -------------------------------------------------------------------------------- /l10n/de.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "webapppassword", 3 | { 4 | "Allowed origins" : "Erlaubte Webseiten", 5 | "Origins that are allowed to access the page (separated by comma)" : "'Origins' mit Zugriffserlaubnis auf die Webseite (durch Beistriche getrennt)", 6 | "Set origins" : "Origin-Webseiten speichern", 7 | "Saved" : "Gespeichert", 8 | "This origin is not allowed!" : "Diese Webseite ist nicht erlaubt!", 9 | "This page should be closed shortly!" : "Diese Seite sollte sich in Kürze schließen!" 10 | }, 11 | "nplurals=2; plural=n!=1;"); 12 | -------------------------------------------------------------------------------- /l10n/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "translations": { 3 | "Allowed origins": "Erlaubte Webseiten", 4 | "Origins that are allowed to access the page (separated by comma)": "'Origins' mit Zugriffserlaubnis auf die Webseite (durch Beistriche getrennt)", 5 | "Set origins": "Origin-Webseiten speichern", 6 | "Saved": "Gespeichert", 7 | "This origin is not allowed!": "Diese Webseite ist nicht erlaubt!", 8 | "This page should be closed shortly!": "Diese Seite sollte sich in Kürze schließen!" 9 | }, 10 | "pluralForm": "nplurals=2; plural=n!=1;" 11 | } 12 | -------------------------------------------------------------------------------- /lib/Settings/Section.php: -------------------------------------------------------------------------------- 1 | url = $url; 17 | $this->l = $l; 18 | } 19 | 20 | public function getID() { 21 | return 'webapppassword'; 22 | } 23 | 24 | public function getName() { 25 | return $this->l->t('WebAppPassword'); 26 | } 27 | 28 | public function getPriority() { 29 | return 10; 30 | } 31 | 32 | public function getIcon() { 33 | return $this->url->imagePath('webapppassword', 'app-dark.svg'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /phpstan.neon: -------------------------------------------------------------------------------- 1 | #includes: 2 | # - vendor/phpstan/phpstan-phpunit/extension.neon 3 | 4 | parameters: 5 | inferPrivatePropertyTypeFromConstructor: true 6 | level: 3 7 | paths: 8 | - appinfo 9 | - lib 10 | - templates 11 | - tests 12 | excludePaths: 13 | ignoreErrors: 14 | - message: '#.*NodeDefinition::children.*#' 15 | path: ./src/DependencyInjection 16 | -------------------------------------------------------------------------------- /phpunit.integration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ./tests/Integration 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ./tests/Unit 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screenshot-filepicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-blueprint/webapppassword/a5e4ab0ea88fec87f7e3dcb8ffc829e2df0d4731/screenshot-filepicker.png -------------------------------------------------------------------------------- /screenshot-webdav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-blueprint/webapppassword/a5e4ab0ea88fec87f7e3dcb8ffc829e2df0d4731/screenshot-webdav.png -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-blueprint/webapppassword/a5e4ab0ea88fec87f7e3dcb8ffc829e2df0d4731/screenshot.png -------------------------------------------------------------------------------- /scripts/pre-commit.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # pre-commit hook script 3 | 4 | echo "Running pre-commit hook with treefmt" 5 | 6 | # Run treefmt to format the code and check if there are any changes after formatting 7 | if ! just fmt --fail-on-change; then 8 | echo -e "\nCode may have been formatted. Please review the changes and commit again." 9 | exit 1 10 | fi 11 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs ? import { }, 3 | }: 4 | pkgs.mkShell { 5 | nativeBuildInputs = with pkgs; [ 6 | gnumake 7 | nodejs 8 | php83 9 | php83Packages.composer 10 | zellij # smart terminal workspace 11 | lazygit # git terminal 12 | just # task runner 13 | act # run GitHub Actions locally 14 | ]; 15 | } 16 | -------------------------------------------------------------------------------- /templates/index.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |
13 | t('This origin is not allowed!') : $l->t('This page should be closed shortly!')); ?> 14 |
15 |
16 | -------------------------------------------------------------------------------- /tests/Integration/AppTest.php: -------------------------------------------------------------------------------- 1 | container = $app->getContainer(); 22 | } 23 | 24 | public function testAppInstalled() { 25 | $appManager = $this->container->query('OCP\App\IAppManager'); 26 | $this->assertTrue($appManager->isInstalled('webapppassword')); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | addValidRoot(OC::$SERVERROOT.'/tests'); 13 | 14 | // Fix for "Autoload path not allowed: .../webapppassword/tests/testcase.php" 15 | \OC_App::loadApp('webapppassword'); 16 | 17 | OC_Hook::clear(); 18 | --------------------------------------------------------------------------------