diff --git a/docs/config.json b/docs/config.json
index 6243d87d59..a68056d734 100644
--- a/docs/config.json
+++ b/docs/config.json
@@ -724,6 +724,10 @@
{
"to": "framework/vue/examples/sub-components",
"label": "Sub Components"
+ },
+ {
+ "to": "framework/vue/examples/filters",
+ "label": "Column Filters"
}
]
}
diff --git a/examples/vue/filters/.gitignore b/examples/vue/filters/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/examples/vue/filters/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/examples/vue/filters/README.md b/examples/vue/filters/README.md
new file mode 100644
index 0000000000..3ac3f1a9b4
--- /dev/null
+++ b/examples/vue/filters/README.md
@@ -0,0 +1,6 @@
+# Example
+
+To run this example:
+
+- `npm install` or `yarn`
+- `npm run dev` or `yarn dev`
diff --git a/examples/vue/filters/env.d.ts b/examples/vue/filters/env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/examples/vue/filters/env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/examples/vue/filters/index.html b/examples/vue/filters/index.html
new file mode 100644
index 0000000000..e160e46247
--- /dev/null
+++ b/examples/vue/filters/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
+
diff --git a/examples/vue/filters/package.json b/examples/vue/filters/package.json
new file mode 100644
index 0000000000..d9da7af2fa
--- /dev/null
+++ b/examples/vue/filters/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "tanstack-table-example-vue-filters",
+ "private": true,
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "test:types": "vue-tsc"
+ },
+ "dependencies": {
+ "@faker-js/faker": "^8.4.1",
+ "vue": "^3.4.31",
+ "@tanstack/vue-table": "^8.19.2"
+ },
+ "devDependencies": {
+ "@types/node": "^20.14.9",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "typescript": "5.4.5",
+ "vite": "^5.3.2",
+ "vue-tsc": "^2.0.22"
+ }
+}
diff --git a/examples/vue/filters/public/favicon.ico b/examples/vue/filters/public/favicon.ico
new file mode 100644
index 0000000000..df36fcfb72
Binary files /dev/null and b/examples/vue/filters/public/favicon.ico differ
diff --git a/examples/vue/filters/src/App.vue b/examples/vue/filters/src/App.vue
new file mode 100644
index 0000000000..967c384957
--- /dev/null
+++ b/examples/vue/filters/src/App.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+ (globalFilter = String(value))"
+ className="p-2 font-lg shadow border border-block"
+ placeholder="Search all columns..."
+ />
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
diff --git a/examples/vue/filters/src/DebouncedInput.vue b/examples/vue/filters/src/DebouncedInput.vue
new file mode 100644
index 0000000000..a15b6a86b7
--- /dev/null
+++ b/examples/vue/filters/src/DebouncedInput.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/examples/vue/filters/src/Filter.vue b/examples/vue/filters/src/Filter.vue
new file mode 100644
index 0000000000..71bb83e48c
--- /dev/null
+++ b/examples/vue/filters/src/Filter.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ column.setFilterValue((old: [number, number]) => [value, old?.[1]])
+ "
+ :placeholder="`Min ${
+ column.getFacetedMinMaxValues()?.[0]
+ ? `(${column.getFacetedMinMaxValues()?.[0]})`
+ : ''
+ }`"
+ class="w-24 border shadow rounded"
+ />
+
+ column.setFilterValue((old: [number, number]) => [old?.[0], value])
+ "
+ :placeholder="`Max ${
+ column.getFacetedMinMaxValues()?.[1]
+ ? `(${column.getFacetedMinMaxValues()?.[1]})`
+ : ''
+ }`"
+ class="w-24 border shadow rounded"
+ />
+
+
+
+
+
+
column.setFilterValue(value)"
+ :placeholder="`Search... (${column.getFacetedUniqueValues().size})`"
+ class="w-36 border shadow rounded"
+ :list="column.id + 'list'"
+ />
+
+
+
diff --git a/examples/vue/filters/src/main.ts b/examples/vue/filters/src/main.ts
new file mode 100644
index 0000000000..01433bca2a
--- /dev/null
+++ b/examples/vue/filters/src/main.ts
@@ -0,0 +1,4 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+
+createApp(App).mount('#app')
diff --git a/examples/vue/filters/tsconfig.json b/examples/vue/filters/tsconfig.json
new file mode 100644
index 0000000000..0b8e08b465
--- /dev/null
+++ b/examples/vue/filters/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "preserve",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
+}
diff --git a/examples/vue/filters/vite.config.ts b/examples/vue/filters/vite.config.ts
new file mode 100644
index 0000000000..05c17402a4
--- /dev/null
+++ b/examples/vue/filters/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [vue()],
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 35c670abe4..b0a11a17ee 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2700,6 +2700,34 @@ importers:
specifier: ^2.0.22
version: 2.0.22(typescript@5.4.5)
+ examples/vue/filters:
+ dependencies:
+ '@faker-js/faker':
+ specifier: ^8.4.1
+ version: 8.4.1
+ '@tanstack/vue-table':
+ specifier: ^8.19.2
+ version: link:../../../packages/vue-table
+ vue:
+ specifier: ^3.4.31
+ version: 3.4.31(typescript@5.4.5)
+ devDependencies:
+ '@types/node':
+ specifier: ^20.14.9
+ version: 20.14.9
+ '@vitejs/plugin-vue':
+ specifier: ^5.0.5
+ version: 5.0.5(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(terser@5.31.1))(vue@3.4.31(typescript@5.4.5))
+ typescript:
+ specifier: 5.4.5
+ version: 5.4.5
+ vite:
+ specifier: ^5.3.2
+ version: 5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(terser@5.31.1)
+ vue-tsc:
+ specifier: ^2.0.22
+ version: 2.0.22(typescript@5.4.5)
+
examples/vue/pagination:
dependencies:
'@faker-js/faker':