├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── dist ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── assets │ ├── index.525b4f4f.css │ ├── index.db294cdd.js │ ├── index.db294cdd.js.map │ └── peaks-logo.72e98b64.svg ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── index.html ├── manifest.json ├── mstile-150x150.png ├── safari-pinned-tab.svg ├── site.webmanifest ├── src │ ├── App.vue.d.ts │ ├── components │ │ ├── AudioPeaks.vue.d.ts │ │ ├── AudioPeaksWidget.vue.d.ts │ │ └── __tests__ │ │ │ └── Credits.spec.d.ts │ ├── documentation │ │ ├── AccessingThePeaksInstance.vue.d.ts │ │ ├── AvailableProperties.vue.d.ts │ │ ├── Credits.vue.d.ts │ │ ├── DemoWidget.vue.d.ts │ │ ├── ExampleErrorHandling.vue.d.ts │ │ ├── ExampleUsingPeaksOptions.vue.d.ts │ │ ├── ExampleUsingReactivity.vue.d.ts │ │ ├── ExampleUsingSlots.vue.d.ts │ │ ├── ExampleUsingVideo.vue.d.ts │ │ ├── ExampleWithStyle.vue.d.ts │ │ ├── ExampleWithTheBasics.vue.d.ts │ │ └── Introduction.vue.d.ts │ ├── index.d.ts │ └── main.d.ts └── vite.config.d.ts ├── env.d.ts ├── index.html ├── package-lock.json ├── package.json ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── mstile-150x150.png ├── safari-pinned-tab.svg └── site.webmanifest ├── src ├── App.vue ├── assets │ ├── peaks-logo.svg │ └── vue-peaks-mods.css ├── components │ ├── AudioPeaks.vue │ ├── AudioPeaksWidget.vue │ └── __tests__ │ │ └── Credits.spec.ts ├── documentation │ ├── AccessingThePeaksInstance.vue │ ├── AvailableProperties.vue │ ├── Credits.vue │ ├── DemoWidget.vue │ ├── ExampleErrorHandling.vue │ ├── ExampleUsingPeaksOptions.vue │ ├── ExampleUsingReactivity.vue │ ├── ExampleUsingSlots.vue │ ├── ExampleUsingVideo.vue │ ├── ExampleWithStyle.vue │ ├── ExampleWithTheBasics.vue │ └── Introduction.vue ├── index.ts └── main.ts ├── tsconfig.json ├── vite.config.ts ├── vue-peaks-example-ui.png └── vue-peaks.code-workspace /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output is included 82 | # .nuxt 83 | # dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # All distribution 107 | dist/ 108 | 109 | # Log files 110 | vite.config.ts.timestamp*.mjs 111 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "vue.vscode-typescript-vue-plugin", 4 | "Vue.volar" 5 | ] 6 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.tabSize": 2, 3 | "typescript.preferences.quoteStyle": "single", 4 | "javascript.preferences.quoteStyle": "single", 5 | "prettier.singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # vue-peaks 2 | 3 | ## 2.0.2 (2023/10/07) 4 | 5 | - used media links from lib.replayer.app 6 | - removed packed media files (reduces package size) 7 | 8 | ## 2.0.1 (2023/09/17) 9 | 10 | - Added default error display 11 | - Updated documentation 12 | 13 | ## 2.0.0 (2023/09/16) 14 | 15 | - Added (unfinished) Typescript support 16 | - Updated documentation 17 | 18 | ## 2.0.0-beta.5 (2023/09/09) 19 | 20 | - Added library mode 21 | - Included default styles in NPM package 22 | 23 | ## 2.0.0-beta.4 (2023/09/09) 24 | 25 | - Used the new peaks.js version 3 26 | - Added automatic size handling, emulating earlier versions 27 | - Adapted access from the deprecated options (views, colors etc...) to their new model 28 | - Added a default lazy loading for the waveforms 29 | - Added a default progress indicator 30 | - Added video support 31 | - Updated the documentation 32 | - Updated internal handling 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-peaks 2 | 3 | ![License](https://img.shields.io/github/license/suterma/vue-peaks.svg 'License') 4 | ![GitHub All Releases](https://img.shields.io/github/downloads/suterma/vue-peaks/total.svg 'GitHub All Releases') 5 | ![Release](https://img.shields.io/github/release/suterma/vue-peaks.svg 'Release') 6 | ![Language](https://img.shields.io/github/languages/top/suterma/vue-peaks.svg 'Language') 7 | ![npm](https://img.shields.io/npm/dm/vue-peaks 'NPM') 8 | [![](https://data.jsdelivr.com/v1/package/npm/vue-peaks/badge 'jsDelivr')](https://www.jsdelivr.com/package/npm/vue-peaks) 9 | [![Rate this package](https://badges.openbase.com/js/rating/vue-peaks.svg?token=vHkEYi5zzp1G84PyPGIiYYDN/9+SZtzXDlLAEe5ffRA=)](https://openbase.com/js/vue-peaks?utm_source=embedded&utm_medium=badge&utm_campaign=rate-badge) 10 | 11 | A lightweight Vue wrapper around the [bbc/peaks.js](https://github.com/bbc/peaks.js) audio waveform UI component. 12 | 13 | ![Image](https://github.com/suterma/vue-peaks/blob/main/vue-peaks-example-ui.png?raw=true) 14 | 15 | vue-peaks aims to simplify the use of [peaks.js](https://github.com/bbc/peaks.js/) in a [Vue3](https://vuejs.org/) environment. It provides a single component, `AudioPeaks`. 16 | 17 | Explore the [live examples](https://suterma.github.io/vue-peaks/). 18 | 19 | # Installation 20 | 21 | ```sh 22 | npm install vue-peaks --save 23 | ``` 24 | 25 | Installing vue-peaks also installs [peaks.js (version 3)](https://github.com/bbc/peaks.js/) as a dependency. Additionally, peaks.js uses [Konva (version 8 or 9)](https://konvajs.org/) and [waveform-data (version 4)](https://github.com/bbc/waveform-data.js) as peer dependencies; these will get installed with vue-peaks, if not already available. 26 | 27 | # How to use 28 | 29 | ## Basic examples 30 | 31 | vue-peaks provides three modes of operation: 32 | 33 | - **Simple mode**: just set the media URL, and all views are automatically rendered by default 34 | - **Slot mode**: the media element and additional views are provided using named slots 35 | - **External mode**: the media element and additional views are referenced by id or HTML element references 36 | 37 | Preferred: Import the compiled component: 38 | 39 | ``` 40 | import { AudioPeaks } from 'vue-peaks'; 41 | // default styles for the AudioPeaks component 42 | import 'vue-peaks/dist/style.css'; 43 | ``` 44 | 45 | Note: Even if you do not use the default (or any other) styles, the overview and zoomview panes still do have a small minimum size set. 46 | 47 | Alternative: The package does not currently properly export types, see issue [#17](https://github.com/suterma/vue-peaks/issues/17). To get TypeScript support, you can also directly include the vue component as SFC: 48 | 49 | ``` 50 | import AudioPeaks from 'vue-peaks/src/components/AudioPeaks.vue'; 51 | // default styles for the AudioPeaks component are already contained in the SFC 52 | ``` 53 | 54 | #### Simple mode 55 | 56 | By default, the [AudioPeaks Vue component](https://github.com/suterma/vue-peaks/blob/main/src/components/AudioPeaks.vue) template creates a new audio element, with the given source URL, and both view panes (overview and zoom, which are rendered with a default size) and a controls pane. A new audio context is created and used to compute the waveform. 57 | 58 | ``` 59 | 60 | ``` 61 | 62 | #### Slot mode 63 | 64 | To provide your own media element, just place it inside the `AudioPeaks` element (a.k.a. the slot). Vue-peaks will use the first media element in the slot. A new audio context is created and used to compute the waveform. 65 | 66 | ``` 67 | 68 | You can also add additional HTML content. 69 | 72 | 73 | ``` 74 | 75 | #### Using a specified media element ("external" mode) 76 | 77 | If you already have an existing media element, you can reference it by it's (unique) id, or as an HTMLMediaElement object. A new audio context is created and used to compute the waveform. 78 | 79 | There are also properties available for the overview area and the zoom view area. 80 | 81 | ``` 82 | 85 |
86 | Using the external media element above.
87 | 88 | 89 | ``` 90 | 91 | See a more [detailed documentation and live examples on the GitHub Pages](https://suterma.github.io/vue-peaks/). 92 | 93 | # Troubleshooting 94 | 95 | **Uncaught TypeError: Cannot read properties of null (reading 'isCE')** 96 | When you use Webpack and locally link to the vue-peaks library, make sure vue is not included twice. See https://github.com/vuejs/core/issues/4478#issuecomment-912235940 97 | 98 | Your vue.config.js should look like 99 | 100 | ``` 101 | const { defineConfig } = require('@vue/cli-service') 102 | const path = require('path') //add 103 | 104 | module.exports = defineConfig({ 105 | transpileDependencies: true, 106 | chainWebpack(config) { 107 | config.resolve.symlinks(false) //add 108 | config.resolve.alias.set( 'vue', path.resolve('./node_modules/vue')) // add 109 | }, 110 | }) 111 | ``` 112 | 113 | # Build & Development 114 | 115 | ## Project Setup 116 | 117 | ```sh 118 | npm install 119 | ``` 120 | 121 | ### Compile and Hot-Reload for Development 122 | 123 | ```sh 124 | npm run dev 125 | ``` 126 | 127 | ### Compile and publish on GitHub pages 128 | 129 | ```sh 130 | # setup (required once) 131 | git config --global pull.rebase true 132 | git config --global push.autoSetupRemote true 133 | 134 | # remove old code in gh-pages (prevents merge conflicts when pushing subtree) 135 | git checkout gh-pages 136 | git rebase -Xtheirs origin/main 137 | git checkout main 138 | 139 | # cleanup 140 | rm -rf dist 141 | npm run build 142 | 143 | # to publish to GitHub Pages (requires committing and pushing the build in the /dist folder) 144 | git add dist -f 145 | git commit -m 'built for gh-pages' 146 | git push 147 | npm run publish-gh-pages 148 | ``` 149 | 150 | ### Compile for Production an publish as Library 151 | 152 | - Update version 153 | - Update CHANGELOG.md 154 | - Disable the App mode and enable the [library mode](https://vitejs.dev/guide/build.html#library-mode) 155 | - in `vite.config.ts` 156 | - uncomment the `resolve` import 157 | - comment out the `rollupOptions` for the App Mode 158 | - uncomment the `lib` property and the subsequent `rollupOptions` for the Library Mode 159 | 160 | ```sh 161 | # cleanup 162 | rm -rf dist 163 | npm run build 164 | # to publish to npm 165 | npm publish 166 | ``` 167 | 168 | - Change back to App mode 169 | 170 | ### Run Unit Tests with [Vitest](https://vitest.dev/) 171 | 172 | ```sh 173 | npm run test:unit 174 | ``` 175 | 176 | # Credits 177 | 178 | - [peaks.js](https://github.com/bbc/peaks.js/), a client-side JavaScript component to display and interact with audio waveforms in the browser. (Released under the LGPL-3.0 license, by the British Broadcasting Corporation and contributors) 179 | - [Vue.js](https://vuejs.org/), the progressive JavaScript framework. (Released under the MIT License, Copyright © 2014-2021 Evan You) 180 | - [Bulma](https://bulma.io/), the modern CSS framework that just works. (Released under the MIT License, by Jeremy Thomas) 181 | - [Bulmaswatch](https://jenil.github.io/bulmaswatch/), free themes for Bulma. (Released under the MIT License, by Jenil Gogari) 182 | - [Material Design Icons](https://materialdesignicons.com/), the original. Following Google's Material Design guidelines for system icons. (Icons released under the Apache 2.0 License, by pictogrammers.com) 183 | - [Jest](https://jestjs.io/), a delightful JavaScript Testing Framework. (Released under the MIT License, by Facebook) 184 | - Music from the Album "Not For Sale" by Lidija Roos (Released to the public, by Lidija Roos) 185 | - [@highlightjs/vue-plugin](https://github.com/highlightjs/vue-plugin), provides a highlightjs component for use in your Vue.js 3 applications. (Released under the BSD-3-Clause license, by the highlight.js team) 186 | - [@rushstack/eslint-patch](https://github.com/microsoft/rushstack/tree/main/eslint/eslint-patch), a patch that improves how ESLint loads plugins when working in a monorepo with a reusable toolchain. (Released under the MIT License, by Microsoft) 187 | - [@types/jsdom, @types/node](https://github.com/DefinitelyTyped/DefinitelyTyped), the repository for high quality TypeScript type definitions. (Released under the MIT License, by various contributors) 188 | - [vite, vitest, @vitejs/plugin-vue](https://github.com/vitejs/vite), next Generation Frontend Tooling. (Released under the MIT License, by the vite team) 189 | - [eslint](https://github.com/eslint/eslint), a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. (Released under the MIT License, by the eslint team) 190 | - [jsdom](https://github.com/jsdom/jsdom), a pure-JavaScript implementation of many web standards. (Released under the MIT License, by the jsdom team) 191 | - [npm-run-all](https://github.com/mysticatea/npm-run-all), a CLI tool to run multiple npm-scripts in parallel or sequential. (Released under the MIT License, by Toru Nagashima) 192 | - [prettier](https://github.com/prettier/prettier), an opinionated Code Formatter. (Released under the MIT License, by the prettier team) 193 | - [typescript](https://github.com/Microsoft/TypeScript), a language for application-scale JavaScript. (Released under the Apache-2.0 license, by Microsoft) 194 | - [vue-tsc](https://github.com/johnsoncodehk/volar), high-performance tooling for Vue. (Released under the MIT License, by Johnson Chu) 195 | - Post [Making and publishing components with Vue 3 and Vite](https://dev.to/matijanovosel/making-and-distributing-a-ui-component-with-vue-3-and-vite-12lk) by [Matija Novosel](https://www.matijanovosel.com/). 196 | 197 | Initial code is taken from 198 | 199 | - [peaks-vue-demo](https://github.com/candeogi/peaks-vue-demo) by Giovanni Candeo (MIT-licensed) 200 | - [vue-waveform-template](https://github.com/thom4parisot/vue-waveform-template) by Thomas Parisot (MIT-licensed) 201 | 202 | --- 203 | 204 | [vue-peaks](https://github.com/suterma/vue-peaks) is created with love by [Marcel Suter](https://marcelsuter.ch) for the [Replayer](https://replayer.app) project. 205 | -------------------------------------------------------------------------------- /dist/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/android-chrome-192x192.png -------------------------------------------------------------------------------- /dist/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/android-chrome-512x512.png -------------------------------------------------------------------------------- /dist/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/apple-touch-icon.png -------------------------------------------------------------------------------- /dist/assets/index.525b4f4f.css: -------------------------------------------------------------------------------- 1 | audio.peaks,video.peaks,div.peaks-overview,div.peaks-zoomview{width:100%}div.peaks-overview,div.peaks-zoomview{height:80px}div.peaks-overview:empty{background:linear-gradient(90deg,rgba(128,128,128,0),var(--652dc135),rgba(128,128,128,0))}div.peaks-zoomview:empty{background:linear-gradient(90deg,var(--6c5d31d4),rgba(128,128,128,0),var(--6c5d31d4))}div.peaks-overview:empty,div.peaks-zoomview:empty{pointer-events:none;background-size:200% 200%;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:reverse;animation-name:viewProgress}@keyframes viewProgress{0%{background-position:-200% -200%}to{background-position:200% 200%}}.peaks.hasError div.peaks-overview:empty,.peaks.hasError div.peaks-zoomview:empty{background:repeating-linear-gradient(-45deg,#e10000,#e10000 10px,#e1000000 10px,#e1000000 20px);animation-name:none}div.box[data-v-b09692c4]{max-width:33vw}.widget[data-v-b3ef7b4c]{height:48px;align-items:center;display:flex;flex-wrap:nowrap;justify-content:flex-start}.item[data-v-b3ef7b4c]{height:48px;display:flex;justify-content:center;align-items:center;border:1px solid var(--color-border);background:var(--color-background);border-radius:8px;cursor:pointer;padding-left:1em;padding-right:1em;text-align:center}.item.peaks-overview[data-v-b3ef7b4c]{flex-grow:1;padding-left:0;padding-right:0}.widget .item[data-v-b3ef7b4c]:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.widget .item[data-v-b3ef7b4c]:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}@keyframes spin-b3ef7b4c{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.spin[data-v-b3ef7b4c]{animation:spin-b3ef7b4c 6s linear infinite}.logo[data-v-4fabe3d4]{display:block;margin:0 auto 2rem}a{text-decoration:underline}.content pre{margin:0;padding:0;border-radius:6px}.code{border:1px solid var(--color-border);background:var(--color-background);border-radius:8px;font-family:monospace;padding:.25rem;margin-top:.25rem;margin-bottom:.25rem}.label.is-multiline,.tag.is-multiline{white-space:break-spaces;word-wrap:break-word;display:block;height:unset}.tag.is-multiline.is-large{padding-top:.5em;padding-bottom:.5em}/*! 2 | Theme: Decaf 3 | Author: Alex Mirrington (https://github.com/alexmirrington) 4 | License: ~ MIT (or more permissive) [via base16-schemes-source] 5 | Maintainer: @highlightjs/core-team 6 | Version: 2021.09.0 7 | */pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#ccc;background:#2d2d2d}.hljs ::selection,.hljs::selection{background-color:#515151;color:#ccc}.hljs-comment{color:#777}.hljs-tag{color:#b4b7b4}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#ccc}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ff7f7b}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ffbf70}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#ffd67c}.hljs-strong{font-weight:700;color:#ffd67c}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#beda78}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#bed6ff}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#90bee1}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#efb3f7}.hljs-emphasis{color:#efb3f7;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#ff93b3}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700} 8 | -------------------------------------------------------------------------------- /dist/assets/peaks-logo.72e98b64.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 40 | 42 | 45 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 59 | 62 | 67 | 68 | 71 | 76 | 77 | 80 | 85 | 86 | 89 | 94 | 95 | 98 | 103 | 104 | 107 | 112 | 113 | 116 | 121 | 122 | 125 | 130 | 131 | 134 | 139 | 140 | 143 | 148 | 149 | 152 | 157 | 158 | 161 | 166 | 167 | 170 | 175 | 176 | 179 | 184 | 185 | 188 | 193 | 194 | 197 | 202 | 203 | 206 | 211 | 212 | 215 | 220 | 221 | 224 | 229 | 230 | 233 | 238 | 239 | 242 | 247 | 248 | 251 | 256 | 257 | 260 | 265 | 266 | 269 | 274 | 275 | 278 | 283 | 284 | 287 | 292 | 293 | 296 | 301 | 302 | 305 | 310 | 311 | 314 | 319 | 320 | 323 | 328 | 329 | 332 | 337 | 338 | 341 | 346 | 347 | 350 | 355 | 356 | 359 | 364 | 365 | 368 | 373 | 374 | 377 | 382 | 383 | 386 | 391 | 392 | 395 | 400 | 401 | 404 | 409 | 410 | 413 | 418 | 419 | 422 | 427 | 428 | 431 | 436 | 437 | 440 | 445 | 446 | 449 | 454 | 455 | 458 | 463 | 464 | 467 | 472 | 473 | 476 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | -------------------------------------------------------------------------------- /dist/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/favicon-16x16.png -------------------------------------------------------------------------------- /dist/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/favicon-32x32.png -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/favicon.ico -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 16 | 22 | 26 | 31 | 32 | 36 | 37 | 41 | 45 | 49 | 53 | vue-peaks 54 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /dist/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "src/assets/peaks-logo.svg": { 3 | "file": "assets/peaks-logo.72e98b64.svg", 4 | "src": "src/assets/peaks-logo.svg" 5 | }, 6 | "index.html": { 7 | "file": "assets/index.db294cdd.js", 8 | "src": "index.html", 9 | "isEntry": true, 10 | "css": [ 11 | "assets/index.525b4f4f.css" 12 | ], 13 | "assets": [ 14 | "assets/peaks-logo.72e98b64.svg" 15 | ] 16 | }, 17 | "index.css": { 18 | "file": "assets/index.525b4f4f.css", 19 | "src": "index.css" 20 | } 21 | } -------------------------------------------------------------------------------- /dist/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/mstile-150x150.png -------------------------------------------------------------------------------- /dist/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 16 | 19 | 22 | 26 | 31 | 34 | 37 | 40 | 43 | 47 | 51 | 54 | 57 | 60 | 63 | 65 | 67 | 69 | 71 | 73 | 76 | 79 | 81 | 84 | 86 | 88 | 90 | 92 | 95 | 97 | 100 | 102 | 104 | 106 | 108 | 110 | 112 | 115 | 117 | 119 | 121 | 123 | 125 | 127 | 129 | 131 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /dist/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-peaks", 3 | "short_name": "vue-peaks", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /dist/src/App.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/components/AudioPeaks.vue.d.ts: -------------------------------------------------------------------------------- 1 | import { type ShallowRef } from 'vue'; 2 | import { type PeaksInstance, type PeaksOptions as PeaksOptions } from 'peaks.js'; 3 | declare const _default: __VLS_WithTemplateSlots; 6 | }; 7 | video: { 8 | type: import("vue").PropType; 9 | }; 10 | eager: { 11 | type: import("vue").PropType; 12 | }; 13 | zoomviewElementId: { 14 | type: import("vue").PropType; 15 | }; 16 | zoomviewElement: { 17 | type: import("vue").PropType; 18 | }; 19 | overviewElementId: { 20 | type: import("vue").PropType; 21 | }; 22 | overviewElement: { 23 | type: import("vue").PropType; 24 | }; 25 | mediaElementId: { 26 | type: import("vue").PropType; 27 | }; 28 | mediaElement: { 29 | type: import("vue").PropType; 30 | }; 31 | options: { 32 | type: import("vue").PropType; 33 | }; 34 | }, { 35 | /** The peaks.js instance is deliberately exposed, to allow direct use of the various APIs. 36 | * @remarks The instance is only available after the mounted lifecycle event and once 37 | * peaks.js has properly initialized. 38 | */ 39 | peaksInstance: ShallowRef; 40 | }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { 41 | error: (error: Error) => void; 42 | }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly; 45 | }; 46 | video: { 47 | type: import("vue").PropType; 48 | }; 49 | eager: { 50 | type: import("vue").PropType; 51 | }; 52 | zoomviewElementId: { 53 | type: import("vue").PropType; 54 | }; 55 | zoomviewElement: { 56 | type: import("vue").PropType; 57 | }; 58 | overviewElementId: { 59 | type: import("vue").PropType; 60 | }; 61 | overviewElement: { 62 | type: import("vue").PropType; 63 | }; 64 | mediaElementId: { 65 | type: import("vue").PropType; 66 | }; 67 | mediaElement: { 68 | type: import("vue").PropType; 69 | }; 70 | options: { 71 | type: import("vue").PropType; 72 | }; 73 | }>> & { 74 | onError?: ((error: Error) => any) | undefined; 75 | }, {}, {}>, { 76 | overview?(_: {}): any; 77 | zoomview?(_: {}): any; 78 | default?(_: {}): any; 79 | controls?(_: {}): any; 80 | }>; 81 | export default _default; 82 | declare type __VLS_WithTemplateSlots = T & { 83 | new (): { 84 | $slots: S; 85 | }; 86 | }; 87 | -------------------------------------------------------------------------------- /dist/src/components/AudioPeaksWidget.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{ 2 | src: { 3 | type: import("vue").PropType; 4 | }; 5 | }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly; 8 | }; 9 | }>>, {}, {}>; 10 | export default _default; 11 | -------------------------------------------------------------------------------- /dist/src/components/__tests__/Credits.spec.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /dist/src/documentation/AccessingThePeaksInstance.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/AvailableProperties.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/Credits.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/DemoWidget.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleErrorHandling.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleUsingPeaksOptions.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleUsingReactivity.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleUsingSlots.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleUsingVideo.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleWithStyle.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/ExampleWithTheBasics.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/documentation/Introduction.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /dist/src/index.d.ts: -------------------------------------------------------------------------------- 1 | import AudioPeaks from './components/AudioPeaks.vue'; 2 | export { AudioPeaks }; 3 | -------------------------------------------------------------------------------- /dist/src/main.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/dist/src/main.d.ts -------------------------------------------------------------------------------- /dist/vite.config.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vite").UserConfigExport; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 16 | 22 | 26 | 31 | 32 | 36 | 37 | 41 | 45 | 49 | 53 | vue-peaks 54 | 55 | 56 | 57 |
58 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-peaks", 3 | "private": false, 4 | "version": "2.0.2", 5 | "type": "module", 6 | "files": [ 7 | "dist", 8 | "src/components/" 9 | ], 10 | "main": "./dist/vue-peaks.umd.cjs", 11 | "module": "./dist/vue-peaks.js", 12 | "exports": { 13 | ".": { 14 | "import": "./dist/vue-peaks.js", 15 | "require": "./dist/vue-peaks.umd.cjs" 16 | }, 17 | "./dist/style.css": { 18 | "import": "./dist/style.css", 19 | "require": "./dist/style.css" 20 | } 21 | }, 22 | "types": "./dist/src/index.d.ts", 23 | "description": "A lightweight Vue wrapper around the bbc/peaks.js audio waveform UI component", 24 | "repository": { 25 | "type": "git", 26 | "url": "git+https://github.com/suterma/vue-peaks.git" 27 | }, 28 | "keywords": [ 29 | "vue", 30 | "peaks.js", 31 | "wrapper", 32 | "waveform", 33 | "UI", 34 | "component" 35 | ], 36 | "author": "Marcel Suter (https://marcelsuter.ch)", 37 | "license": "LGPL-3.0-or-later", 38 | "bugs": { 39 | "url": "https://github.com/suterma/vue-peaks/issues" 40 | }, 41 | "homepage": "https://github.com/suterma/vue-peaks#readme", 42 | "scripts": { 43 | "dev": "vite", 44 | "build": "run-p type-check build-only", 45 | "publish-gh-pages": "git subtree push --prefix dist origin gh-pages", 46 | "preview": "vite preview --port 4173", 47 | "test:unit": "vitest --environment jsdom", 48 | "build-only": "vite build", 49 | "type-check": "vue-tsc --noEmit -p tsconfig.json --composite false", 50 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" 51 | }, 52 | "dependencies": { 53 | "@vueuse/core": "^10.4.1", 54 | "peaks.js": "^3.0.0", 55 | "vue": "^3.2.39" 56 | }, 57 | "devDependencies": { 58 | "@highlightjs/vue-plugin": "^2.1.0", 59 | "@rushstack/eslint-patch": "^1.1.4", 60 | "@types/jsdom": "^20.0.0", 61 | "@types/node": "^16.11.47", 62 | "@vitejs/plugin-vue": "^3.0.1", 63 | "@vue/eslint-config-prettier": "^7.0.0", 64 | "@vue/eslint-config-typescript": "^11.0.0", 65 | "@vue/test-utils": "^2.0.2", 66 | "@vue/tsconfig": "^0.1.3", 67 | "eslint": "^8.21.0", 68 | "eslint-plugin-vue": "^9.3.0", 69 | "jsdom": "^20.0.0", 70 | "npm-run-all": "^4.1.5", 71 | "prettier": "^2.7.1", 72 | "typescript": "~4.7.4", 73 | "vite": "^3.0.4", 74 | "vite-plugin-dts": "^3.5.3", 75 | "vitest": "^0.21.0", 76 | "vue-tsc": "^0.39.5" 77 | }, 78 | "peerDependencies": { 79 | "konva": ">= 8.3.14 < 10", 80 | "waveform-data": ">= 4.3.0 < 5", 81 | "vue": "^3.0.0" 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/favicon.ico -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suterma/vue-peaks/69c8241f5aed9d92f0937cc29a0fa7e0bde2fc0b/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 16 | 19 | 22 | 26 | 31 | 34 | 37 | 40 | 43 | 47 | 51 | 54 | 57 | 60 | 63 | 65 | 67 | 69 | 71 | 73 | 76 | 79 | 81 | 84 | 86 | 88 | 90 | 92 | 95 | 97 | 100 | 102 | 104 | 106 | 108 | 110 | 112 | 115 | 117 | 119 | 121 | 123 | 125 | 127 | 129 | 131 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-peaks", 3 | "short_name": "vue-peaks", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 197 | 198 | 204 | -------------------------------------------------------------------------------- /src/assets/peaks-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 40 | 42 | 45 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 59 | 62 | 67 | 68 | 71 | 76 | 77 | 80 | 85 | 86 | 89 | 94 | 95 | 98 | 103 | 104 | 107 | 112 | 113 | 116 | 121 | 122 | 125 | 130 | 131 | 134 | 139 | 140 | 143 | 148 | 149 | 152 | 157 | 158 | 161 | 166 | 167 | 170 | 175 | 176 | 179 | 184 | 185 | 188 | 193 | 194 | 197 | 202 | 203 | 206 | 211 | 212 | 215 | 220 | 221 | 224 | 229 | 230 | 233 | 238 | 239 | 242 | 247 | 248 | 251 | 256 | 257 | 260 | 265 | 266 | 269 | 274 | 275 | 278 | 283 | 284 | 287 | 292 | 293 | 296 | 301 | 302 | 305 | 310 | 311 | 314 | 319 | 320 | 323 | 328 | 329 | 332 | 337 | 338 | 341 | 346 | 347 | 350 | 355 | 356 | 359 | 364 | 365 | 368 | 373 | 374 | 377 | 382 | 383 | 386 | 391 | 392 | 395 | 400 | 401 | 404 | 409 | 410 | 413 | 418 | 419 | 422 | 427 | 428 | 431 | 436 | 437 | 440 | 445 | 446 | 449 | 454 | 455 | 458 | 463 | 464 | 467 | 472 | 473 | 476 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | -------------------------------------------------------------------------------- /src/assets/vue-peaks-mods.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: underline; 3 | } 4 | 5 | .content pre { 6 | margin: 0; 7 | padding: 0; 8 | 9 | border-radius: 6px; 10 | } 11 | 12 | .code { 13 | border: 1px solid var(--color-border); 14 | background: var(--color-background); 15 | border-radius: 8px; 16 | font-family: monospace; 17 | /* font-size: small; */ 18 | padding: 0.25rem; 19 | margin-top: 0.25rem; 20 | margin-bottom: 0.25rem; 21 | } 22 | 23 | /* Multi-line tags */ 24 | .label.is-multiline, 25 | .tag.is-multiline { 26 | white-space: break-spaces; 27 | word-wrap: break-word; 28 | display: block; 29 | height: unset; 30 | } 31 | .tag.is-multiline.is-large { 32 | padding-top: 0.5em; 33 | padding-bottom: 0.5em; 34 | } 35 | -------------------------------------------------------------------------------- /src/components/AudioPeaks.vue: -------------------------------------------------------------------------------- 1 | 404 | 481 | 550 | -------------------------------------------------------------------------------- /src/components/AudioPeaksWidget.vue: -------------------------------------------------------------------------------- 1 | 78 |