├── .browserslistrc ├── .prettierrc ├── .eslintignore ├── .prettierignore ├── demo ├── public │ ├── logo.png │ ├── favicon.ico │ ├── favicon-16x16.png │ └── favicon-32x32.png ├── main.ts ├── demo-footer.vue ├── vite.config.ts ├── index.html ├── badge-list.vue ├── demo-header.vue ├── demo-tools.vue ├── github-logo.vue └── app.vue ├── shims-vue.d.ts ├── README.md ├── bundlesize.config.json ├── .editorconfig ├── renovate.json ├── .github ├── semantic.yml └── workflows │ ├── cd.yml │ ├── maintenance.yml │ ├── ci.yml │ └── codeql-analysis.yml ├── codecov.yml ├── .gitignore ├── release.config.js ├── jest.config.js ├── src ├── index.ts └── masonry-wall.vue ├── tsconfig.json ├── .eslintrc ├── vite.config.ts ├── LICENSE ├── package.json ├── test └── masonry-wall.spec.ts └── CHANGELOG.md /.browserslistrc: -------------------------------------------------------------------------------- 1 | current node 2 | last 2 versions and > 2% 3 | ie > 10 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts 2 | coverage 3 | dist 4 | node_modules 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts 2 | coverage 3 | dist 4 | node_modules 5 | -------------------------------------------------------------------------------- /demo/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerYeger/vue2-masonry-wall/HEAD/demo/public/logo.png -------------------------------------------------------------------------------- /shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | -------------------------------------------------------------------------------- /demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerYeger/vue2-masonry-wall/HEAD/demo/public/favicon.ico -------------------------------------------------------------------------------- /demo/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerYeger/vue2-masonry-wall/HEAD/demo/public/favicon-16x16.png -------------------------------------------------------------------------------- /demo/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerYeger/vue2-masonry-wall/HEAD/demo/public/favicon-32x32.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @yeger/vue2-masonry-wall 2 | 3 | > This repository was moved to [DerYeger/yeger](https://github.com/DerYeger/yeger/tree/main/packages/vue2-masonry-wall). 4 | -------------------------------------------------------------------------------- /bundlesize.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | { 4 | "path": "./dist/*.js", 5 | "maxSize": "1.7KB", 6 | "compression": "brotli" 7 | } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /demo/main.ts: -------------------------------------------------------------------------------- 1 | import Vue, { VNode } from 'vue' 2 | import App from './app.vue' 3 | import MasonryWall from '@/index' 4 | 5 | Vue.config.productionTip = false 6 | 7 | Vue.use(MasonryWall) 8 | 9 | new Vue({ 10 | render: (h): VNode => h(App), 11 | }).$mount('#app') 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "github>DerYeger/renovate-config", 4 | "github>DerYeger/renovate-config:vue-2" 5 | ], 6 | "packageRules": [ 7 | { 8 | "matchPackageNames": ["vite"], 9 | "allowedVersions": "<3.0.0" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /demo/demo-footer.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /.github/semantic.yml: -------------------------------------------------------------------------------- 1 | # Always validate the PR title AND all the commits 2 | titleAndCommits: true 3 | # Allows use of Merge commits (eg on github: "Merge branch 'master' into feature/ride-unicorns") 4 | # this is only relevant when using commitsOnly: true (or titleAndCommits: true) 5 | allowMergeCommits: false 6 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | range: 90..100 3 | round: down 4 | precision: 2 5 | status: 6 | project: 7 | default: 8 | target: 90 9 | threshold: 5 10 | base: auto 11 | patch: 12 | default: 13 | target: 90 14 | threshold: 5 15 | base: auto 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | 15 | # Coverage files 16 | coverage 17 | 18 | # Editor directories and files 19 | .idea 20 | .vscode 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | -------------------------------------------------------------------------------- /release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | '@semantic-release/commit-analyzer', 4 | '@semantic-release/release-notes-generator', 5 | '@semantic-release/changelog', 6 | '@semantic-release/npm', 7 | '@semantic-release/github', 8 | [ 9 | '@semantic-release/git', 10 | { 11 | assets: ['CHANGELOG.md', './package.json'], 12 | }, 13 | ], 14 | ], 15 | } 16 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | collectCoverage: true, 4 | collectCoverageFrom: ['/src/*.ts', '/src/masonry-wall.vue'], 5 | moduleDirectories: ['node_modules', '/src', '/test'], 6 | moduleFileExtensions: ['js', 'ts', 'vue'], 7 | moduleNameMapper: { 8 | '@/(.+)$': '/src/$1', 9 | '~/(.+)$': '/test/$1', 10 | }, 11 | transform: { 12 | '^.+\\.vue$': 'vue-jest', 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /demo/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import { createVuePlugin } from 'vite-plugin-vue2' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | root: 'demo', 7 | plugins: [createVuePlugin()], 8 | resolve: { 9 | alias: [ 10 | { 11 | find: '@', 12 | replacement: '../src', 13 | }, 14 | ], 15 | }, 16 | server: { 17 | fs: { 18 | // Allow serving files from one level up to the project root 19 | allow: ['..'], 20 | }, 21 | }, 22 | }) 23 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import _Vue, { PluginObject } from 'vue' 2 | import component from '@/masonry-wall.vue' 3 | 4 | type InstallableComponent = typeof component & PluginObject 5 | 6 | const MasonryWall: InstallableComponent = 7 | /*#__PURE__*/ ((): InstallableComponent => { 8 | const installable = component as unknown as InstallableComponent 9 | 10 | installable.install = (Vue: typeof _Vue) => { 11 | Vue.component('MasonryWall', installable) 12 | } 13 | 14 | return installable 15 | })() 16 | 17 | export default MasonryWall 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": true, 6 | "declaration": true, 7 | "declarationDir": "dist/types", 8 | "noUnusedLocals": true, 9 | "noUnusedParameters": true, 10 | "importHelpers": true, 11 | "isolatedModules": true, 12 | "moduleResolution": "node", 13 | "experimentalDecorators": true, 14 | "esModuleInterop": true, 15 | "allowJs": false, 16 | "allowSyntheticDefaultImports": true, 17 | "sourceMap": true, 18 | "baseUrl": ".", 19 | "newLine": "lf", 20 | "types": ["node", "jest", "vue", "resize-observer-browser"], 21 | "paths": { 22 | "@/*": ["src/*"] 23 | }, 24 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 25 | }, 26 | "exclude": ["node_modules", "dist"] 27 | } 28 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | name: CD 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | paths: 7 | - 'demo/**' 8 | release: 9 | types: [created] 10 | 11 | jobs: 12 | build-demo: 13 | name: Build demo 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Yarn setup 17 | uses: DerYeger/yarn-setup-action@master 18 | with: 19 | node-version: 16 20 | - name: Generate files 21 | run: yarn demo:build 22 | - name: Create 404.html file 23 | run: cp ./demo/dist/index.html ./demo/dist/404.html 24 | - name: Deploy 25 | uses: JamesIves/github-pages-deploy-action@v4.4.1 26 | with: 27 | branch: gh-pages 28 | folder: ./demo/dist 29 | clean: true 30 | single-commit: true 31 | git-config-name: Jan Müller 32 | git-config-email: janmueller3698@gmail.com 33 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true 5 | }, 6 | "plugins": [ 7 | "@typescript-eslint" 8 | ], 9 | "extends": [ 10 | "eslint:recommended", 11 | "plugin:prettier/recommended", 12 | "plugin:@typescript-eslint/recommended", 13 | "plugin:vue/recommended" 14 | ], 15 | "parser": "vue-eslint-parser", 16 | "parserOptions": { 17 | "ecmaVersion": 2020, 18 | "parser": "@typescript-eslint/parser", 19 | "sourceType": "module" 20 | }, 21 | "rules": { 22 | "@typescript-eslint/no-non-null-assertion": "off", 23 | "vue/max-attributes-per-line": "off", 24 | "vue/html-self-closing": "off", 25 | "vue/singleline-html-element-content-newline": "off" 26 | }, 27 | "overrides": [ 28 | { 29 | "files": ["test/**/*.{j,t}s?(x)"], 30 | "env": { 31 | "jest": true 32 | } 33 | } 34 | ], 35 | "globals": { 36 | "defineProps": "readonly", 37 | "defineEmits": "readonly", 38 | "withDefaults": "readonly" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path' 2 | import { defineConfig } from 'vite' 3 | import dts from 'vite-plugin-dts' 4 | import { createVuePlugin } from 'vite-plugin-vue2' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [ 9 | createVuePlugin(), 10 | dts({ 11 | cleanVueFileName: true, 12 | include: 'src/**', 13 | outputDir: 'dist/types', 14 | staticImport: true, 15 | }), 16 | ], 17 | resolve: { 18 | alias: [ 19 | { 20 | find: '@', 21 | replacement: path.resolve(__dirname, 'src'), 22 | }, 23 | ], 24 | }, 25 | build: { 26 | lib: { 27 | entry: path.resolve(__dirname, 'src/index.ts'), 28 | formats: ['es', 'umd'], 29 | name: 'MasonryWall', 30 | fileName: (format) => `masonry-wall.${format}.js`, 31 | }, 32 | rollupOptions: { 33 | external: ['vue'], 34 | output: { 35 | globals: { 36 | vue: 'Vue', 37 | }, 38 | }, 39 | }, 40 | }, 41 | }) 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Fuxing Loh, Jan Müller 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @yeger/vue2-masonry-wall 7 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /.github/workflows/maintenance.yml: -------------------------------------------------------------------------------- 1 | name: Maintenance 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: '0 3 * * *' 7 | 8 | jobs: 9 | cleanup: 10 | name: Cleanup 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Delete assets of old releases 14 | uses: dev-drprasad/delete-older-releases@v0.2.0 15 | with: 16 | keep_latest: 3 17 | env: 18 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 19 | stale: 20 | name: Stale 21 | runs-on: ubuntu-latest 22 | steps: 23 | - name: Close stale issues 24 | uses: actions/stale@v6 25 | with: 26 | repo-token: ${{ secrets.GITHUB_TOKEN }} 27 | stale-issue-message: 'This issue has been marked stale because there was no activity for 21 days. Without further action, it will be closed in 3 days.' 28 | days-before-stale: 21 29 | days-before-close: 3 30 | exempt-assignees: DerYeger 31 | exempt-issue-labels: bug, dependencies, enhancement, renovate 32 | exempt-pr-labels: bug, dependencies, enhancement, renovate 33 | analyze-tags: 34 | name: Analyze tags 35 | runs-on: ubuntu-latest 36 | outputs: 37 | previous-tag: ${{ steps.previoustag.outputs.tag }} 38 | timestamp-diff: ${{ steps.diff.outputs.timestamp-diff }} 39 | steps: 40 | - name: Checkout 41 | uses: actions/checkout@master 42 | with: 43 | fetch-depth: 0 44 | - name: Get previous tag 45 | id: previoustag 46 | uses: WyriHaximus/github-action-get-previous-tag@v1 47 | - name: Get seconds from previous tag to now 48 | id: diff 49 | shell: bash 50 | env: 51 | TIMESTAMP_TAG: ${{ steps.previoustag.outputs.timestamp }} 52 | run: | 53 | echo "::set-output name=timestamp-diff::$(expr $(printf '%(%s)T') - $TIMESTAMP_TAG)" 54 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [pull_request, push] 4 | 5 | jobs: 6 | prepare: 7 | name: Prepare 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Yarn setup 11 | uses: DerYeger/yarn-setup-action@master 12 | with: 13 | node-version: 16 14 | build: 15 | name: Build 16 | runs-on: ubuntu-latest 17 | needs: prepare 18 | steps: 19 | - name: Yarn setup 20 | uses: DerYeger/yarn-setup-action@master 21 | with: 22 | node-version: 16 23 | - name: Build 24 | run: yarn build 25 | demo: 26 | name: Build demo 27 | runs-on: ubuntu-latest 28 | needs: prepare 29 | steps: 30 | - name: Yarn setup 31 | uses: DerYeger/yarn-setup-action@master 32 | with: 33 | node-version: 16 34 | - name: Build 35 | run: yarn demo:build 36 | lint: 37 | name: Lint 38 | runs-on: ubuntu-latest 39 | needs: prepare 40 | steps: 41 | - name: Yarn setup 42 | uses: DerYeger/yarn-setup-action@master 43 | with: 44 | node-version: 16 45 | - name: Lint 46 | run: yarn lint 47 | test: 48 | name: Test 49 | runs-on: ubuntu-latest 50 | needs: prepare 51 | steps: 52 | - name: Yarn setup 53 | uses: DerYeger/yarn-setup-action@master 54 | with: 55 | node-version: 16 56 | - name: Test 57 | run: yarn test 58 | - name: Upload coverage to Codecov 59 | uses: codecov/codecov-action@v3 60 | with: 61 | token: ${{ secrets.CODECOV_TOKEN }} 62 | # release: 63 | # name: Release 64 | # runs-on: ubuntu-latest 65 | # needs: [build, demo, lint, test] 66 | # if: github.event_name == 'push' && github.ref == 'refs/heads/master' 67 | # steps: 68 | # - name: Yarn setup 69 | # uses: DerYeger/yarn-setup-action@master 70 | # with: 71 | # node-version: 16 72 | # - name: Semantic release 73 | # uses: cycjimmy/semantic-release-action@v3.2.0 74 | # with: 75 | # extra_plugins: | 76 | # @semantic-release/changelog 77 | # @semantic-release/git 78 | # env: 79 | # GITHUB_TOKEN: ${{ secrets.PAT }} 80 | # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 81 | -------------------------------------------------------------------------------- /demo/badge-list.vue: -------------------------------------------------------------------------------- 1 | 71 | 72 | 78 | -------------------------------------------------------------------------------- /demo/demo-header.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 40 | 41 | 101 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: 'CodeQL' 13 | 14 | on: 15 | push: 16 | branches: [master] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [master] 20 | schedule: 21 | - cron: '24 10 * * 3' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: ['javascript'] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 37 | # Learn more: 38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v3 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v2 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v2 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v2 72 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@yeger/vue2-masonry-wall", 3 | "version": "2.0.75", 4 | "description": "Responsive masonry layout with SSR support and zero dependencies for Vue 2.", 5 | "license": "MIT", 6 | "repository": "github:DerYeger/vue2-masonry-wall", 7 | "homepage": "https://vue2-masonry-wall.yeger.eu", 8 | "bugs": { 9 | "url": "https://github.com/DerYeger/vue2-masonry-wall/issues" 10 | }, 11 | "author": { 12 | "name": "Jan Müller", 13 | "url": "https://github.com/DerYeger" 14 | }, 15 | "keywords": [ 16 | "vue", 17 | "plugin", 18 | "component", 19 | "masonry", 20 | "wall" 21 | ], 22 | "main": "dist/masonry-wall.umd.js", 23 | "browser": "dist/masonry-wall.es.js", 24 | "module": "dist/masonry-wall.es.js", 25 | "unpkg": "dist/masonry-wall.umd.js", 26 | "types": "dist/types/index.d.ts", 27 | "files": [ 28 | "dist/*", 29 | "masonry-wall.d.ts", 30 | "src/**/*.vue" 31 | ], 32 | "scripts": { 33 | "demo:serve": "vite --config demo/vite.config.ts", 34 | "demo:build": "vite --config demo/vite.config.ts build", 35 | "demo:preview": "yarn demo:build && vite --config demo/vite.config.ts preview", 36 | "test": "jest", 37 | "prebuild": "rimraf ./dist", 38 | "build": "vite build", 39 | "postbuild": "bundlesize", 40 | "lint": "yarn lint:prettier && yarn lint:eslint", 41 | "lint:prettier": "prettier --write \"./**/*.{js,json,html,scss,ts,vue,yml}\"", 42 | "lint:eslint": "eslint \"./**/*.{js,ts,vue}\"", 43 | "pretty": "prettier --write \"./**/*.{js,json,html,scss,ts,vue,yml}\"", 44 | "prepublishOnly": "yarn build", 45 | "ci": "yarn pretty && yarn lint && yarn test && yarn demo:build && yarn build" 46 | }, 47 | "sideEffects": false, 48 | "devDependencies": { 49 | "@types/jest": "27.5.2", 50 | "@types/resize-observer-browser": "0.1.7", 51 | "@typescript-eslint/eslint-plugin": "5.44.0", 52 | "@typescript-eslint/parser": "5.44.0", 53 | "@vue/compiler-sfc": "3.2.45", 54 | "@vue/test-utils": "1.3.3", 55 | "babel-core": "7.0.0-bridge.0", 56 | "bundlesize2": "0.0.31", 57 | "eslint": "8.28.0", 58 | "eslint-config-prettier": "8.5.0", 59 | "eslint-plugin-prettier": "4.2.1", 60 | "eslint-plugin-vue": "9.8.0", 61 | "flush-promises": "1.0.2", 62 | "jest": "27.5.1", 63 | "prettier": "2.8.0", 64 | "rimraf": "3.0.2", 65 | "ts-jest": "27.1.5", 66 | "typescript": "4.9.3", 67 | "vite": "2.9.15", 68 | "vite-plugin-dts": "1.3.1", 69 | "vite-plugin-vue2": "2.0.2", 70 | "vue": "2.6.14", 71 | "vue-eslint-parser": "9.1.0", 72 | "vue-jest": "3.0.7", 73 | "vue-template-compiler": "2.6.14" 74 | }, 75 | "peerDependencies": { 76 | "vue": "^2.0.0" 77 | }, 78 | "engines": { 79 | "node": ">=12" 80 | }, 81 | "publishConfig": { 82 | "access": "public" 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /demo/demo-tools.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 96 | 97 | 146 | -------------------------------------------------------------------------------- /demo/github-logo.vue: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /demo/app.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 67 | 68 | 197 | -------------------------------------------------------------------------------- /src/masonry-wall.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 51 | 52 | 166 | -------------------------------------------------------------------------------- /test/masonry-wall.spec.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @jest-environment jsdom 3 | */ 4 | 5 | import { mount } from '@vue/test-utils' 6 | import flushPromises from 'flush-promises' 7 | import MasonryWall from '@/index' 8 | import Vue from 'vue' 9 | 10 | let observeMock = jest.fn() 11 | let unobserveMock = jest.fn() 12 | 13 | function mockResizeObserver() { 14 | observeMock = jest.fn() 15 | unobserveMock = jest.fn() 16 | const resizeObserverMock = jest.fn().mockImplementation(() => ({ 17 | disconnect: jest.fn(), 18 | observe: observeMock, 19 | unobserve: unobserveMock, 20 | })) 21 | window.ResizeObserver = window.ResizeObserver || resizeObserverMock 22 | } 23 | 24 | type MasonryWallType = InstanceType 25 | 26 | const TestComponent = Vue.extend({ 27 | template: '', 28 | }) 29 | 30 | describe('MasonryWall', () => { 31 | beforeAll(() => { 32 | console.warn = function (message) { 33 | throw message 34 | } 35 | }) 36 | beforeEach(() => { 37 | mockResizeObserver() 38 | window.scrollTo = jest.fn() 39 | }) 40 | afterEach(() => { 41 | jest.clearAllMocks() 42 | }) 43 | it('can be installed', async () => { 44 | Vue.use(MasonryWall) 45 | const wrapper = mount(TestComponent) 46 | await flushPromises() 47 | const wall = wrapper.find('.masonry-wall') 48 | expect(wall.element).toBeDefined() 49 | const items = wrapper.findAll('.masonry-item') 50 | expect(items.length).toEqual(3) 51 | }) 52 | it('creates SSR columns', async () => { 53 | const wrapper = mount(MasonryWall, { 54 | propsData: { 55 | items: [1, 2], 56 | ssrColumns: 1, 57 | }, 58 | }) 59 | await flushPromises() 60 | const wall = wrapper.find('.masonry-wall') 61 | expect(wall.element).toBeDefined() 62 | const columns = wrapper.findAll('.masonry-column') 63 | expect(columns.length).toEqual(1) 64 | const items = wrapper.findAll('.masonry-item') 65 | expect(items.length).toEqual(2) 66 | }) 67 | it('reacts to item changes', async () => { 68 | const wrapper = mount(MasonryWall, { 69 | propsData: { 70 | items: [1, 2], 71 | }, 72 | }) 73 | await flushPromises() 74 | const wall = wrapper.find('.masonry-wall') 75 | expect(wall.element).toBeDefined() 76 | const columns = wrapper.findAll('.masonry-column') 77 | expect(columns.length).toEqual(1) 78 | expect(wrapper.findAll('.masonry-item').length).toEqual(2) 79 | wrapper.setProps({ 80 | items: [1, 2, 3], 81 | }) 82 | await flushPromises() 83 | expect(wrapper.findAll('.masonry-item').length).toEqual(3) 84 | wrapper.setProps({ 85 | items: [1], 86 | }) 87 | await flushPromises() 88 | expect(wrapper.findAll('.masonry-item').length).toEqual(1) 89 | }) 90 | it('unobserves the ResizeObserver', async () => { 91 | expect(observeMock.mock.calls.length).toEqual(0) 92 | const wrapper = mount(MasonryWall, { 93 | propsData: { 94 | items: [1, 2], 95 | }, 96 | }) 97 | await flushPromises() 98 | expect(observeMock.mock.calls.length).toEqual(1) 99 | expect(unobserveMock.mock.calls.length).toEqual(0) 100 | wrapper.destroy() 101 | expect(unobserveMock.mock.calls.length).toEqual(1) 102 | }) 103 | it('reacts to column-width prop changes', async () => { 104 | const wrapper = mount(MasonryWall, { 105 | propsData: { 106 | items: [1, 2], 107 | }, 108 | }) 109 | await flushPromises() 110 | expect(wrapper.emitted('redraw')?.length).toEqual(1) 111 | expect(wrapper.emitted('redraw-skip')).toBeUndefined() 112 | wrapper.setProps({ 113 | columnWidth: 300, 114 | }) 115 | await flushPromises() 116 | expect(wrapper.emitted('redraw')?.length).toEqual(1) 117 | expect(wrapper.emitted('redraw-skip')?.length).toEqual(1) 118 | }) 119 | it('reacts to gap prop changes', async () => { 120 | const wrapper = mount(MasonryWall, { 121 | propsData: { 122 | items: [1, 2], 123 | }, 124 | }) 125 | await flushPromises() 126 | expect(wrapper.emitted('redraw')?.length).toEqual(1) 127 | expect(wrapper.emitted('redraw-skip')).toBeUndefined() 128 | wrapper.setProps({ 129 | gap: 42, 130 | }) 131 | await flushPromises() 132 | expect(wrapper.emitted('redraw')?.length).toEqual(1) 133 | expect(wrapper.emitted('redraw-skip')?.length).toEqual(1) 134 | }) 135 | it('reacts to rtl prop changes', async () => { 136 | const wrapper = mount(MasonryWall, { 137 | propsData: { 138 | items: [1, 2], 139 | }, 140 | }) 141 | await flushPromises() 142 | expect(wrapper.emitted('redraw')?.length).toEqual(1) 143 | wrapper.setProps({ 144 | rtl: true, 145 | }) 146 | await flushPromises() 147 | expect(wrapper.emitted('redraw')?.length).toEqual(2) 148 | }) 149 | it('adds items to the smallest column', async () => { 150 | const wrapper = mount(MasonryWall, { 151 | propsData: { 152 | items: [], 153 | columnWidth: 100, 154 | gap: 0, 155 | }, 156 | }) 157 | await flushPromises() 158 | const wall = wrapper.find('.masonry-wall') 159 | wall.element.getBoundingClientRect = (): DOMRect => ({ 160 | bottom: 0, 161 | height: 0, 162 | left: 0, 163 | right: 0, 164 | top: 0, 165 | width: 300, 166 | x: 0, 167 | y: 0, 168 | toJSON(): string { 169 | return '' 170 | }, 171 | }) 172 | wrapper.setProps({ 173 | items: [1, 2], 174 | }) 175 | await flushPromises() 176 | 177 | const [first, second, third] = wall.findAll('.masonry-column').wrappers 178 | expect(first.element.childElementCount).toEqual(2) 179 | expect(second.element.childElementCount).toEqual(0) 180 | expect(third.element.childElementCount).toEqual(0) 181 | 182 | first.element.getBoundingClientRect = (): DOMRect => ({ 183 | bottom: 0, 184 | height: 500, 185 | left: 0, 186 | right: 0, 187 | top: 0, 188 | width: 0, 189 | x: 0, 190 | y: 0, 191 | toJSON(): string { 192 | return '' 193 | }, 194 | }) 195 | third.element.getBoundingClientRect = (): DOMRect => ({ 196 | bottom: 0, 197 | height: 200, 198 | left: 0, 199 | right: 0, 200 | top: 0, 201 | width: 0, 202 | x: 0, 203 | y: 0, 204 | toJSON(): string { 205 | return '' 206 | }, 207 | }) 208 | 209 | wrapper.setProps({ 210 | items: [1, 2, 3], 211 | }) 212 | await flushPromises() 213 | 214 | const [firstNew, secondNew, thirdNew] = 215 | wall.findAll('.masonry-column').wrappers 216 | expect(firstNew.element.childElementCount).toEqual(0) 217 | expect(secondNew.element.childElementCount).toEqual(3) 218 | expect(thirdNew.element.childElementCount).toEqual(0) 219 | }) 220 | }) 221 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [2.0.75](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.74...v2.0.75) (2022-11-26) 2 | 3 | 4 | ### Bug Fixes 5 | 6 | * **deps:** update typescript-eslint monorepo to v5.44.0 ([7a5dc82](https://github.com/DerYeger/vue2-masonry-wall/commit/7a5dc824d56433d88f1e2dfdc9bfda637ab61a23)) 7 | 8 | ## [2.0.74](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.73...v2.0.74) (2022-11-26) 9 | 10 | 11 | ### Bug Fixes 12 | 13 | * **deps:** update all non-major dependencies ([c6f9315](https://github.com/DerYeger/vue2-masonry-wall/commit/c6f931553d2cd379733bf6edfa3a41364468ed27)) 14 | 15 | ## [2.0.73](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.72...v2.0.73) (2022-11-19) 16 | 17 | 18 | ### Bug Fixes 19 | 20 | * **deps:** update typescript-eslint monorepo to v5.43.0 ([00edcef](https://github.com/DerYeger/vue2-masonry-wall/commit/00edcefe8482ec2a8b0c1637dae7b4d132af256e)) 21 | 22 | ## [2.0.72](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.71...v2.0.72) (2022-11-19) 23 | 24 | 25 | ### Bug Fixes 26 | 27 | * **deps:** update all non-major dependencies ([9017bee](https://github.com/DerYeger/vue2-masonry-wall/commit/9017beed29bb2deb523135c630725a90d7761868)) 28 | 29 | ## [2.0.71](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.70...v2.0.71) (2022-11-12) 30 | 31 | 32 | ### Bug Fixes 33 | 34 | * **deps:** update dependency eslint to v8.27.0 ([915c975](https://github.com/DerYeger/vue2-masonry-wall/commit/915c975c3192b428428b5669e710453037e6f7c9)) 35 | 36 | ## [2.0.70](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.69...v2.0.70) (2022-11-12) 37 | 38 | 39 | ### Bug Fixes 40 | 41 | * **deps:** update typescript-eslint monorepo to v5.42.1 ([0452e6f](https://github.com/DerYeger/vue2-masonry-wall/commit/0452e6f64a1ec58ff72be1953f122b047f103d1b)) 42 | 43 | ## [2.0.69](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.68...v2.0.69) (2022-11-12) 44 | 45 | 46 | ### Bug Fixes 47 | 48 | * **deps:** update dependency @vue/compiler-sfc to v3.2.45 ([6f92c9c](https://github.com/DerYeger/vue2-masonry-wall/commit/6f92c9cbe5d0c58fe97f38e4c9046d66f1054a1b)) 49 | 50 | ## [2.0.68](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.67...v2.0.68) (2022-11-05) 51 | 52 | 53 | ### Bug Fixes 54 | 55 | * **deps:** update typescript-eslint monorepo to v5.42.0 ([aa8e0be](https://github.com/DerYeger/vue2-masonry-wall/commit/aa8e0be75d6079f13ed6a944acf9ca37193fad3d)) 56 | 57 | ## [2.0.67](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.66...v2.0.67) (2022-11-05) 58 | 59 | 60 | ### Bug Fixes 61 | 62 | * **deps:** update all non-major dependencies ([ebb1893](https://github.com/DerYeger/vue2-masonry-wall/commit/ebb18934560df1ae415cc24be142758e0764440e)) 63 | 64 | ## [2.0.66](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.65...v2.0.66) (2022-10-29) 65 | 66 | 67 | ### Bug Fixes 68 | 69 | * **deps:** update typescript-eslint monorepo to v5.41.0 ([9d0d195](https://github.com/DerYeger/vue2-masonry-wall/commit/9d0d195e1591acc5a034de38df1ccbfa3da46f77)) 70 | 71 | ## [2.0.65](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.64...v2.0.65) (2022-10-22) 72 | 73 | 74 | ### Bug Fixes 75 | 76 | * **deps:** update typescript-eslint monorepo to v5.40.1 ([93d14e4](https://github.com/DerYeger/vue2-masonry-wall/commit/93d14e43dfb7540589793260fcb855ccfc08db9d)) 77 | 78 | ## [2.0.64](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.63...v2.0.64) (2022-10-22) 79 | 80 | 81 | ### Bug Fixes 82 | 83 | * **deps:** update all non-major dependencies ([8e67863](https://github.com/DerYeger/vue2-masonry-wall/commit/8e6786381a2c9d64d98deb4fe77a047c1fac4028)) 84 | 85 | ## [2.0.63](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.62...v2.0.63) (2022-10-15) 86 | 87 | 88 | ### Bug Fixes 89 | 90 | * **deps:** update typescript-eslint monorepo to v5.40.0 ([6d24a6c](https://github.com/DerYeger/vue2-masonry-wall/commit/6d24a6c1618fc70acee6b3e54981ad9a8fbba284)) 91 | 92 | ## [2.0.62](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.61...v2.0.62) (2022-10-15) 93 | 94 | 95 | ### Bug Fixes 96 | 97 | * **deps:** update jamesives/github-pages-deploy-action action to v4.4.1 ([c790430](https://github.com/DerYeger/vue2-masonry-wall/commit/c79043074f1a808fe4ca1b85605fba6ec51e6c57)) 98 | 99 | ## [2.0.61](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.60...v2.0.61) (2022-10-15) 100 | 101 | 102 | ### Bug Fixes 103 | 104 | * **deps:** update dependency @vue/compiler-sfc to v3.2.41 ([de5e2da](https://github.com/DerYeger/vue2-masonry-wall/commit/de5e2da5e966015241695c6f6c4d13b782923312)) 105 | 106 | ## [2.0.60](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.59...v2.0.60) (2022-10-08) 107 | 108 | 109 | ### Bug Fixes 110 | 111 | * **deps:** update all non-major dependencies ([772f37e](https://github.com/DerYeger/vue2-masonry-wall/commit/772f37e27d115f8b4151bac5f3937183ded94571)) 112 | 113 | ## [2.0.59](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.58...v2.0.59) (2022-10-08) 114 | 115 | 116 | ### Bug Fixes 117 | 118 | * **deps:** update typescript-eslint monorepo to v5.39.0 ([578a788](https://github.com/DerYeger/vue2-masonry-wall/commit/578a7888f352c65094a293014f7135b7ded55bb3)) 119 | 120 | ## [2.0.58](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.57...v2.0.58) (2022-10-01) 121 | 122 | 123 | ### Bug Fixes 124 | 125 | * **deps:** update all non-major dependencies ([e6e07c3](https://github.com/DerYeger/vue2-masonry-wall/commit/e6e07c38c339375169b1e250e9412a0474d67d50)) 126 | 127 | ## [2.0.57](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.56...v2.0.57) (2022-10-01) 128 | 129 | 130 | ### Bug Fixes 131 | 132 | * **deps:** update dependency @vue/compiler-sfc to v3.2.40 ([d1bd8cb](https://github.com/DerYeger/vue2-masonry-wall/commit/d1bd8cb82a4aea7752b1fa995751d4683df075a3)) 133 | 134 | ## [2.0.56](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.55...v2.0.56) (2022-09-24) 135 | 136 | 137 | ### Bug Fixes 138 | 139 | * **deps:** update actions/stale action to v6 ([ace1421](https://github.com/DerYeger/vue2-masonry-wall/commit/ace1421c74784014eeb309acf04c2cb4c2c5209b)) 140 | 141 | ## [2.0.55](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.54...v2.0.55) (2022-09-17) 142 | 143 | 144 | ### Bug Fixes 145 | 146 | * **deps:** update typescript-eslint monorepo to v5.37.0 ([53c62f5](https://github.com/DerYeger/vue2-masonry-wall/commit/53c62f5d76bbc574ea42b20b2058b92184f3912c)) 147 | 148 | ## [2.0.54](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.53...v2.0.54) (2022-09-17) 149 | 150 | 151 | ### Bug Fixes 152 | 153 | * **deps:** update all non-major dependencies ([1b68972](https://github.com/DerYeger/vue2-masonry-wall/commit/1b68972bfdb265e53cf9faae6412f507326ba6e5)) 154 | 155 | ## [2.0.53](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.52...v2.0.53) (2022-09-10) 156 | 157 | 158 | ### Bug Fixes 159 | 160 | * **deps:** update vue monorepo ([00e94e1](https://github.com/DerYeger/vue2-masonry-wall/commit/00e94e163a7824f9a64e359297f3fde2af779e66)) 161 | 162 | ## [2.0.52](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.51...v2.0.52) (2022-09-10) 163 | 164 | 165 | ### Bug Fixes 166 | 167 | * **deps:** update dependency typescript to v4.8.3 ([0a3ea6d](https://github.com/DerYeger/vue2-masonry-wall/commit/0a3ea6db7f4d4aaca075e8c4288a11b78418c572)) 168 | 169 | ## [2.0.51](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.50...v2.0.51) (2022-09-03) 170 | 171 | 172 | ### Bug Fixes 173 | 174 | * **deps:** update cycjimmy/semantic-release-action action to v3.1.1 ([d37a0d6](https://github.com/DerYeger/vue2-masonry-wall/commit/d37a0d6893ccbb65846a3299c266b1fd2c30a37a)) 175 | 176 | ## [2.0.50](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.49...v2.0.50) (2022-09-03) 177 | 178 | 179 | ### Bug Fixes 180 | 181 | * **release:** schedule release ([de18520](https://github.com/DerYeger/vue2-masonry-wall/commit/de1852064e517cbeba2b476180b0832d32f51e58)) 182 | 183 | ## [2.0.49](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.48...v2.0.49) (2022-08-27) 184 | 185 | 186 | ### Bug Fixes 187 | 188 | * **deps:** update dependency eslint to v8.23.0 ([20fb1dc](https://github.com/DerYeger/vue2-masonry-wall/commit/20fb1dc7077755ae2c0c8f68acac00d42f35fe2f)) 189 | 190 | ## [2.0.48](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.47...v2.0.48) (2022-08-26) 191 | 192 | 193 | ### Bug Fixes 194 | 195 | * **deps:** update dependency typescript to v4.8.2 ([223ca24](https://github.com/DerYeger/vue2-masonry-wall/commit/223ca24f4bb7d1e0694c6249ac671ba29de03636)) 196 | 197 | ## [2.0.47](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.46...v2.0.47) (2022-08-25) 198 | 199 | 200 | ### Bug Fixes 201 | 202 | * **deps:** update typescript-eslint monorepo to v5.35.1 ([b39017a](https://github.com/DerYeger/vue2-masonry-wall/commit/b39017a544aea8188826c25de7486853264e8a2b)) 203 | 204 | ## [2.0.46](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.45...v2.0.46) (2022-08-24) 205 | 206 | 207 | ### Bug Fixes 208 | 209 | * **deps:** update dependency eslint-plugin-vue to v9.4.0 ([e3069cb](https://github.com/DerYeger/vue2-masonry-wall/commit/e3069cbe93d1f2325feb62982437d80318c42e72)) 210 | 211 | ## [2.0.45](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.44...v2.0.45) (2022-08-23) 212 | 213 | 214 | ### Bug Fixes 215 | 216 | * **deps:** update typescript-eslint monorepo to v5.34.0 ([6a98955](https://github.com/DerYeger/vue2-masonry-wall/commit/6a98955b7e1c0582cd33faede7375f66eda5117c)) 217 | 218 | ## [2.0.44](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.43...v2.0.44) (2022-08-23) 219 | 220 | 221 | ### Bug Fixes 222 | 223 | * **release:** schedule release ([9055d8f](https://github.com/DerYeger/vue2-masonry-wall/commit/9055d8f1a972cff381d8dede95dbf11753b4dcb9)) 224 | 225 | ## [2.0.43](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.42...v2.0.43) (2022-08-16) 226 | 227 | 228 | ### Bug Fixes 229 | 230 | * **deps:** update typescript-eslint monorepo to v5.33.1 ([1962937](https://github.com/DerYeger/vue2-masonry-wall/commit/1962937d7b1f7ebfc93238fef7c6674b5cac153b)) 231 | 232 | ## [2.0.42](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.41...v2.0.42) (2022-08-14) 233 | 234 | 235 | ### Bug Fixes 236 | 237 | * **release:** schedule release ([cf7df03](https://github.com/DerYeger/vue2-masonry-wall/commit/cf7df03e5cb056845639fb6ff57d297a48f51290)) 238 | 239 | ## [2.0.41](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.40...v2.0.41) (2022-08-06) 240 | 241 | 242 | ### Bug Fixes 243 | 244 | * **release:** schedule release ([bedc75d](https://github.com/DerYeger/vue2-masonry-wall/commit/bedc75da132cca1154871fcb0c89e0a817a6ada4)) 245 | 246 | ## [2.0.40](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.39...v2.0.40) (2022-07-29) 247 | 248 | 249 | ### Bug Fixes 250 | 251 | * **release:** schedule release ([04f7dff](https://github.com/DerYeger/vue2-masonry-wall/commit/04f7dffcb1384665e846235a21fb66d7bdf2cec6)) 252 | 253 | ## [2.0.39](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.38...v2.0.39) (2022-07-22) 254 | 255 | 256 | ### Bug Fixes 257 | 258 | * **release:** schedule release ([5dd7c8e](https://github.com/DerYeger/vue2-masonry-wall/commit/5dd7c8e8e1a24246763132c2853f973b56f61209)) 259 | 260 | ## [2.0.38](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.37...v2.0.38) (2022-07-14) 261 | 262 | 263 | ### Bug Fixes 264 | 265 | * resolve paths correctly ([eeb81cf](https://github.com/DerYeger/vue2-masonry-wall/commit/eeb81cf638448ead8e082ae754f3374f11e9966b)) 266 | 267 | ## [2.0.37](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.36...v2.0.37) (2022-07-10) 268 | 269 | 270 | ### Bug Fixes 271 | 272 | * **release:** schedule release ([f3a52b1](https://github.com/DerYeger/vue2-masonry-wall/commit/f3a52b1d9a312d5dbcd66cb798e97d17469c6de3)) 273 | 274 | ## [2.0.36](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.35...v2.0.36) (2022-07-02) 275 | 276 | 277 | ### Bug Fixes 278 | 279 | * **release:** schedule release ([72983dd](https://github.com/DerYeger/vue2-masonry-wall/commit/72983dd7eb801910a6e26d8014d9ea24705bd451)) 280 | 281 | ## [2.0.35](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.34...v2.0.35) (2022-06-25) 282 | 283 | 284 | ### Bug Fixes 285 | 286 | * **release:** schedule release ([1db849f](https://github.com/DerYeger/vue2-masonry-wall/commit/1db849f58f19a341c8f7ba6dd7fca414eba85c74)) 287 | 288 | ## [2.0.34](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.33...v2.0.34) (2022-06-18) 289 | 290 | 291 | ### Bug Fixes 292 | 293 | * **release:** schedule release ([2c48777](https://github.com/DerYeger/vue2-masonry-wall/commit/2c48777eca30ea7907f0d929eff25dbc14f84ea1)) 294 | 295 | ## [2.0.33](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.32...v2.0.33) (2022-06-11) 296 | 297 | 298 | ### Bug Fixes 299 | 300 | * **release:** schedule release ([6176aff](https://github.com/DerYeger/vue2-masonry-wall/commit/6176affdbd0770a3153b89071ffbe4f42e55ea4d)) 301 | 302 | ## [2.0.32](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.31...v2.0.32) (2022-06-04) 303 | 304 | 305 | ### Bug Fixes 306 | 307 | * **release:** schedule release ([3795392](https://github.com/DerYeger/vue2-masonry-wall/commit/37953921b995f07f6409213824b48f6f32b4c419)) 308 | 309 | ## [2.0.31](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.30...v2.0.31) (2022-05-27) 310 | 311 | 312 | ### Bug Fixes 313 | 314 | * **release:** schedule release ([23a43ee](https://github.com/DerYeger/vue2-masonry-wall/commit/23a43ee69926e004c8c001f8130759fb4973764a)) 315 | 316 | ## [2.0.30](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.29...v2.0.30) (2022-05-19) 317 | 318 | 319 | ### Bug Fixes 320 | 321 | * **release:** schedule release ([787f0ef](https://github.com/DerYeger/vue2-masonry-wall/commit/787f0ef01c1217a887ebb5f6268ec2fcfa260d5a)) 322 | 323 | ## [2.0.29](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.28...v2.0.29) (2022-05-12) 324 | 325 | 326 | ### Bug Fixes 327 | 328 | * **release:** schedule release ([8f4788f](https://github.com/DerYeger/vue2-masonry-wall/commit/8f4788fd5c086c73526032d409be274d5c48bde9)) 329 | 330 | ## [2.0.28](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.27...v2.0.28) (2022-05-04) 331 | 332 | 333 | ### Bug Fixes 334 | 335 | * **release:** schedule release ([91bae4c](https://github.com/DerYeger/vue2-masonry-wall/commit/91bae4c7e0c7f8057da0ece7eac4b8bb710df542)) 336 | 337 | ## [2.0.27](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.26...v2.0.27) (2022-04-26) 338 | 339 | 340 | ### Bug Fixes 341 | 342 | * **release:** schedule release ([58c86ad](https://github.com/DerYeger/vue2-masonry-wall/commit/58c86adaac9504575c3bcb0e79fcdf7a13ec4475)) 343 | 344 | ## [2.0.26](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.25...v2.0.26) (2022-04-18) 345 | 346 | 347 | ### Bug Fixes 348 | 349 | * **release:** schedule release ([c46dd31](https://github.com/DerYeger/vue2-masonry-wall/commit/c46dd31702839527632d5e3d4edcb98ce22c0201)) 350 | 351 | ## [2.0.25](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.24...v2.0.25) (2022-04-10) 352 | 353 | 354 | ### Bug Fixes 355 | 356 | * **release:** schedule release ([7eefcf0](https://github.com/DerYeger/vue2-masonry-wall/commit/7eefcf0003d382c95628768db6f73cd8fa7660e7)) 357 | 358 | ## [2.0.24](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.23...v2.0.24) (2022-04-02) 359 | 360 | 361 | ### Bug Fixes 362 | 363 | * **release:** schedule release ([580e7ea](https://github.com/DerYeger/vue2-masonry-wall/commit/580e7ea7b774ca558f6987cc82afc9dec3c925dd)) 364 | 365 | ## [2.0.23](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.22...v2.0.23) (2022-03-26) 366 | 367 | 368 | ### Bug Fixes 369 | 370 | * **release:** schedule release ([3d1d3c8](https://github.com/DerYeger/vue2-masonry-wall/commit/3d1d3c85d8557524b14b60305f1ddb77fe5fd22b)) 371 | 372 | ## [2.0.22](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.21...v2.0.22) (2022-03-19) 373 | 374 | 375 | ### Bug Fixes 376 | 377 | * **release:** schedule release ([df1a324](https://github.com/DerYeger/vue2-masonry-wall/commit/df1a32479cee8b5392be900fc63de3dafd4d80c3)) 378 | 379 | ## [2.0.21](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.20...v2.0.21) (2022-03-11) 380 | 381 | 382 | ### Bug Fixes 383 | 384 | * **release:** schedule release ([ea413f5](https://github.com/DerYeger/vue2-masonry-wall/commit/ea413f5e261a82712f00af37c5c32522d159f516)) 385 | 386 | ## [2.0.20](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.19...v2.0.20) (2022-03-03) 387 | 388 | 389 | ### Bug Fixes 390 | 391 | * **release:** schedule release ([7dfe728](https://github.com/DerYeger/vue2-masonry-wall/commit/7dfe728f8a5b7e3d4efee786772433bff97e35c5)) 392 | 393 | ## [2.0.19](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.18...v2.0.19) (2022-02-23) 394 | 395 | 396 | ### Bug Fixes 397 | 398 | * **release:** schedule release ([bde972a](https://github.com/DerYeger/vue2-masonry-wall/commit/bde972a3c03b74f9f601066097e4772644e7a370)) 399 | 400 | ## [2.0.18](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.17...v2.0.18) (2022-02-15) 401 | 402 | 403 | ### Bug Fixes 404 | 405 | * **release:** schedule release ([5e1d95b](https://github.com/DerYeger/vue2-masonry-wall/commit/5e1d95bb10ef434616fb949abcdb016a719430ae)) 406 | 407 | ## [2.0.17](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.16...v2.0.17) (2022-02-07) 408 | 409 | 410 | ### Bug Fixes 411 | 412 | * **release:** schedule release ([ec4736c](https://github.com/DerYeger/vue2-masonry-wall/commit/ec4736ca84b0d4836c477abaa90c4897b730999b)) 413 | 414 | ## [2.0.16](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.15...v2.0.16) (2022-01-30) 415 | 416 | 417 | ### Bug Fixes 418 | 419 | * **release:** schedule release ([023d418](https://github.com/DerYeger/vue2-masonry-wall/commit/023d41843303cf76f3d0771e7734805002e2f260)) 420 | 421 | ## [2.0.15](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.14...v2.0.15) (2022-01-22) 422 | 423 | 424 | ### Bug Fixes 425 | 426 | * **release:** schedule release ([79c8174](https://github.com/DerYeger/vue2-masonry-wall/commit/79c8174215f1d8faa1f3407d005859cc1a2e6853)) 427 | 428 | ## [2.0.14](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.13...v2.0.14) (2022-01-14) 429 | 430 | 431 | ### Bug Fixes 432 | 433 | * **release:** schedule release ([4506fcd](https://github.com/DerYeger/vue2-masonry-wall/commit/4506fcd7284bd3888baab6263602a8918c73bbb6)) 434 | 435 | ## [2.0.13](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.12...v2.0.13) (2022-01-06) 436 | 437 | 438 | ### Bug Fixes 439 | 440 | * **release:** schedule release ([220d4d4](https://github.com/DerYeger/vue2-masonry-wall/commit/220d4d44166fb1a4815c16805afc54af2953fa2c)) 441 | 442 | ## [2.0.12](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.11...v2.0.12) (2021-12-30) 443 | 444 | 445 | ### Bug Fixes 446 | 447 | * **release:** schedule release ([d561c26](https://github.com/DerYeger/vue2-masonry-wall/commit/d561c262b21bfa5e1243361d02f4d9e2de78d458)) 448 | 449 | ## [2.0.11](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.10...v2.0.11) (2021-12-22) 450 | 451 | 452 | ### Bug Fixes 453 | 454 | * **release:** schedule release ([05d8bac](https://github.com/DerYeger/vue2-masonry-wall/commit/05d8bacced2296d09dafa8cf9aad3f3b9293371b)) 455 | 456 | ## [2.0.10](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.9...v2.0.10) (2021-12-14) 457 | 458 | 459 | ### Bug Fixes 460 | 461 | * **release:** schedule release ([ab7a5e2](https://github.com/DerYeger/vue2-masonry-wall/commit/ab7a5e2740668a4e4ad8dbc7b2520c532aca50bb)) 462 | 463 | ## [2.0.9](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.8...v2.0.9) (2021-12-06) 464 | 465 | 466 | ### Bug Fixes 467 | 468 | * **release:** schedule release ([cb9ad1f](https://github.com/DerYeger/vue2-masonry-wall/commit/cb9ad1f5d281e80f03b5c4e0bfe20e0b216fc242)) 469 | 470 | ## [2.0.8](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.7...v2.0.8) (2021-11-28) 471 | 472 | 473 | ### Bug Fixes 474 | 475 | * **release:** schedule release ([f3b4591](https://github.com/DerYeger/vue2-masonry-wall/commit/f3b4591a2e740264cae25bc12a9b07c177a574bd)) 476 | 477 | ## [2.0.7](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.6...v2.0.7) (2021-11-20) 478 | 479 | 480 | ### Bug Fixes 481 | 482 | * **release:** schedule release ([9147af4](https://github.com/DerYeger/vue2-masonry-wall/commit/9147af414bafa1816193ab9d0f25bad76ec19f86)) 483 | 484 | ## [2.0.6](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.5...v2.0.6) (2021-11-12) 485 | 486 | 487 | ### Bug Fixes 488 | 489 | * restore scroll position after redrawing ([0f5b4d0](https://github.com/DerYeger/vue2-masonry-wall/commit/0f5b4d095f528b362ca6c1e5bd743c2a6801c8b0)) 490 | 491 | ## [2.0.5](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.4...v2.0.5) (2021-11-08) 492 | 493 | 494 | ### Bug Fixes 495 | 496 | * **release:** schedule release ([32062d7](https://github.com/DerYeger/vue2-masonry-wall/commit/32062d76577bc64d2106cec8b7ba664c60b986a3)) 497 | 498 | ## [2.0.4](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.3...v2.0.4) (2021-10-31) 499 | 500 | 501 | ### Bug Fixes 502 | 503 | * **release:** schedule release ([ee28e73](https://github.com/DerYeger/vue2-masonry-wall/commit/ee28e73d6a97eb22dabddd45b0d12cbf54840e89)) 504 | 505 | ## [2.0.3](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.2...v2.0.3) (2021-10-23) 506 | 507 | 508 | ### Bug Fixes 509 | 510 | * **release:** schedule release ([6619ee0](https://github.com/DerYeger/vue2-masonry-wall/commit/6619ee0b19f35b93b6d862154028b1f1d9653e82)) 511 | 512 | ## [2.0.2](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.1...v2.0.2) (2021-10-15) 513 | 514 | 515 | ### Bug Fixes 516 | 517 | * **release:** schedule release ([aa0a70a](https://github.com/DerYeger/vue2-masonry-wall/commit/aa0a70a299c051db86cd0d57bc4deaddb2281078)) 518 | 519 | ## [2.0.1](https://github.com/DerYeger/vue2-masonry-wall/compare/v2.0.0...v2.0.1) (2021-10-07) 520 | 521 | 522 | ### Bug Fixes 523 | 524 | * **release:** schedule release ([ca93781](https://github.com/DerYeger/vue2-masonry-wall/commit/ca9378150900258bb4c020dbb0debaa18a403480)) 525 | 526 | # [2.0.0](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.8...v2.0.0) (2021-09-29) 527 | 528 | 529 | ### Bug Fixes 530 | 531 | * **props:** add default value to `ssrColumns` ([c7e7d58](https://github.com/DerYeger/vue2-masonry-wall/commit/c7e7d58c25cbd01b079519c80008dcd18aee9461)) 532 | * replace `Column` object with `number[]` ([7ec6666](https://github.com/DerYeger/vue2-masonry-wall/commit/7ec666632139e807cccb2fd5cc73e9e4da762490)) 533 | 534 | 535 | ### Features 536 | 537 | * **emit:** add `redraw` and `redraw-skip` ([766216c](https://github.com/DerYeger/vue2-masonry-wall/commit/766216c4c08909cbca93352c4a10e5ef7f095e5b)) 538 | * replace margins with flexbox `gap` ([89062d7](https://github.com/DerYeger/vue2-masonry-wall/commit/89062d701cfb36a4c6a668710060e2f187f4fbe5)) 539 | * **vue:** use `vite` for building ([32eacad](https://github.com/DerYeger/vue2-masonry-wall/commit/32eacadd00af13cfc4e72f2ba6d5f80763a2bbb5)) 540 | 541 | 542 | ### BREAKING CHANGES 543 | 544 | * Rename `padding` to `gap` 545 | 546 | ## [1.1.8](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.7...v1.1.8) (2021-09-29) 547 | 548 | 549 | ### Bug Fixes 550 | 551 | * remove various linting issues ([fccd51b](https://github.com/DerYeger/vue2-masonry-wall/commit/fccd51b50dda04f3c3491a0fc2debb3497d9c1d4)) 552 | 553 | ## [1.1.7](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.6...v1.1.7) (2021-09-27) 554 | 555 | 556 | ### Bug Fixes 557 | 558 | * **release:** schedule release ([d2bd774](https://github.com/DerYeger/vue2-masonry-wall/commit/d2bd774873201437c32b3395f87abb669b7747b4)) 559 | 560 | ## [1.1.6](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.5...v1.1.6) (2021-09-19) 561 | 562 | 563 | ### Bug Fixes 564 | 565 | * **release:** schedule release ([e02a171](https://github.com/DerYeger/vue2-masonry-wall/commit/e02a171df372db17794d79f297fb27fe7b275c3c)) 566 | 567 | ## [1.1.5](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.4...v1.1.5) (2021-08-23) 568 | 569 | 570 | ### Bug Fixes 571 | 572 | * inline all styles ([9168ee6](https://github.com/DerYeger/vue2-masonry-wall/commit/9168ee6cf1f5caad03ed950c1166fff86f2b3f4a)) 573 | 574 | ## [1.1.4](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.3...v1.1.4) (2021-08-23) 575 | 576 | 577 | ### Bug Fixes 578 | 579 | * remove redundant `masonry-column__floor` elements ([7a7ce52](https://github.com/DerYeger/vue2-masonry-wall/commit/7a7ce528c834709fcc01c4bb77087b0134945dc6)) 580 | * remove unused `ready` data ([15c7610](https://github.com/DerYeger/vue2-masonry-wall/commit/15c7610d7c1b5eb653432dce36e65c061a84f92f)) 581 | * replace `cursor` with recursion parameter ([a659da1](https://github.com/DerYeger/vue2-masonry-wall/commit/a659da1081e268be3ee640b01c51dc4af7c73a3d)) 582 | * use `getBoundingClientRect` instead of height properties ([46b3472](https://github.com/DerYeger/vue2-masonry-wall/commit/46b3472bc900ebc62e3456320a86f58e3ddcc3cb)) 583 | 584 | ## [1.1.3](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.2...v1.1.3) (2021-08-21) 585 | 586 | 587 | ### Bug Fixes 588 | 589 | * update side-effects ([e1816c6](https://github.com/DerYeger/vue2-masonry-wall/commit/e1816c613215ed18dd4e47d5c2566177a1723ded)) 590 | 591 | ## [1.1.2](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.1...v1.1.2) (2021-08-21) 592 | 593 | 594 | ### Bug Fixes 595 | 596 | * specify side-effects ([6072a9a](https://github.com/DerYeger/vue2-masonry-wall/commit/6072a9aa83e8860107cb5d32c1764c2b48be8a48)) 597 | 598 | ## [1.1.1](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.1.0...v1.1.1) (2021-08-21) 599 | 600 | 601 | ### Bug Fixes 602 | 603 | * check if item is actually `undefined` ([22ac971](https://github.com/DerYeger/vue2-masonry-wall/commit/22ac9712495c4fd9fc6c68f2fcb17fc7977975a0)) 604 | * remove redundant check in `padding` watcher ([a5fb508](https://github.com/DerYeger/vue2-masonry-wall/commit/a5fb508b02a79c03cd091a17960aacb8f459e8f7)) 605 | 606 | # [1.1.0](https://github.com/DerYeger/vue2-masonry-wall/compare/v1.0.0...v1.1.0) (2021-08-20) 607 | 608 | 609 | ### Features 610 | 611 | * add support for rtl layouting ([5be854f](https://github.com/DerYeger/vue2-masonry-wall/commit/5be854f40f71d3ab0c18ce6b8f2463450a66755a)) 612 | 613 | # 1.0.0 (2021-08-16) 614 | 615 | 616 | ### Features 617 | 618 | * create project ([918b5f6](https://github.com/DerYeger/vue2-masonry-wall/commit/918b5f6035ee2d7df33935180cba49d7d8455fc3)) 619 | --------------------------------------------------------------------------------