move utils around

This commit is contained in:
Nate Kelley 2025-02-21 12:07:30 -07:00
parent 289a57cc10
commit 48f62b14fc
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
120 changed files with 198 additions and 198 deletions

176
web/package-lock.json generated
View File

@ -21,14 +21,14 @@
"@supabase/auth-helpers-react": "^0.5.0",
"@supabase/ssr": "^0.5.2",
"@supabase/supabase-js": "^2.48.1",
"@tanstack/react-query": "^5.66.7",
"@tanstack/react-query": "^5.66.9",
"@vercel/speed-insights": "^1.2.0",
"ahooks": "^3.8.4",
"antd": "5.23.3",
"antd-style": "^3.7.1",
"axios": "^1.7.9",
"canvas-confetti": "^1.9.3",
"chart.js": "^4.4.7",
"chart.js": "^4.4.8",
"chartjs": "^0.3.24",
"chartjs-adapter-dayjs-4": "^1.0.4",
"chartjs-chart-geo": "^4.3.4",
@ -52,7 +52,7 @@
"echarts-stat": "^1.2.0",
"email-validator": "^2.0.4",
"font-color-contrast": "^11.1.0",
"framer-motion": "^12.4.4",
"framer-motion": "^12.4.7",
"html2canvas": "^1.4.1",
"js-cookie": "^3.0.5",
"jspdf": "^2.5.2",
@ -89,11 +89,11 @@
"split-pane-react": "^0.1.3",
"tailwind-merge": "^3.0.1",
"utility-types": "^3.11.0",
"uuid": "^11.0.5",
"uuid": "^11.1.0",
"virtua": "^0.40.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.0.7",
"@tailwindcss/postcss": "^4.0.8",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
"@testing-library/user-event": "^14.6.1",
@ -121,7 +121,7 @@
"monaco-editor-webpack-plugin": "^7.1.0",
"postcss": "8.5.3",
"sass": "^1.83.4",
"tailwindcss": "^4.0.7",
"tailwindcss": "^4.0.8",
"ts-jest": "^29.2.5",
"typescript": "^5"
},
@ -3824,54 +3824,44 @@
}
},
"node_modules/@tailwindcss/node": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.7.tgz",
"integrity": "sha512-dkFXufkbRB2mu3FPsW5xLAUWJyexpJA+/VtQj18k3SUiJVLdpgzBd1v1gRRcIpEJj7K5KpxBKfOXlZxT3ZZRuA==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.8.tgz",
"integrity": "sha512-FKArQpbrbwv08TNT0k7ejYXpF+R8knZFAatNc0acOxbgeqLzwb86r+P3LGOjIeI3Idqe9CVkZrh4GlsJLJKkkw==",
"dev": true,
"license": "MIT",
"dependencies": {
"enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2",
"tailwindcss": "4.0.7"
}
},
"node_modules/@tailwindcss/node/node_modules/jiti": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"dev": true,
"license": "MIT",
"bin": {
"jiti": "lib/jiti-cli.mjs"
"tailwindcss": "4.0.8"
}
},
"node_modules/@tailwindcss/oxide": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.7.tgz",
"integrity": "sha512-yr6w5YMgjy+B+zkJiJtIYGXW+HNYOPfRPtSs+aqLnKwdEzNrGv4ZuJh9hYJ3mcA+HMq/K1rtFV+KsEr65S558g==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.8.tgz",
"integrity": "sha512-KfMcuAu/Iw+DcV1e8twrFyr2yN8/ZDC/odIGta4wuuJOGkrkHZbvJvRNIbQNhGh7erZTYV6Ie0IeD6WC9Y8Hcw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
"@tailwindcss/oxide-android-arm64": "4.0.7",
"@tailwindcss/oxide-darwin-arm64": "4.0.7",
"@tailwindcss/oxide-darwin-x64": "4.0.7",
"@tailwindcss/oxide-freebsd-x64": "4.0.7",
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.7",
"@tailwindcss/oxide-linux-arm64-gnu": "4.0.7",
"@tailwindcss/oxide-linux-arm64-musl": "4.0.7",
"@tailwindcss/oxide-linux-x64-gnu": "4.0.7",
"@tailwindcss/oxide-linux-x64-musl": "4.0.7",
"@tailwindcss/oxide-win32-arm64-msvc": "4.0.7",
"@tailwindcss/oxide-win32-x64-msvc": "4.0.7"
"@tailwindcss/oxide-android-arm64": "4.0.8",
"@tailwindcss/oxide-darwin-arm64": "4.0.8",
"@tailwindcss/oxide-darwin-x64": "4.0.8",
"@tailwindcss/oxide-freebsd-x64": "4.0.8",
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.8",
"@tailwindcss/oxide-linux-arm64-gnu": "4.0.8",
"@tailwindcss/oxide-linux-arm64-musl": "4.0.8",
"@tailwindcss/oxide-linux-x64-gnu": "4.0.8",
"@tailwindcss/oxide-linux-x64-musl": "4.0.8",
"@tailwindcss/oxide-win32-arm64-msvc": "4.0.8",
"@tailwindcss/oxide-win32-x64-msvc": "4.0.8"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.7.tgz",
"integrity": "sha512-5iQXXcAeOHBZy8ASfHFm1k0O/9wR2E3tKh6+P+ilZZbQiMgu+qrnfpBWYPc3FPuQdWiWb73069WT5D+CAfx/tg==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.8.tgz",
"integrity": "sha512-We7K79+Sm4mwJHk26Yzu/GAj7C7myemm7PeXvpgMxyxO70SSFSL3uCcqFbz9JA5M5UPkrl7N9fkBe/Y0iazqpA==",
"cpu": [
"arm64"
],
@ -3886,9 +3876,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.7.tgz",
"integrity": "sha512-7yGZtEc5IgVYylqK/2B0yVqoofk4UAbkn1ygNpIJZyrOhbymsfr8uUFCueTu2fUxmAYIfMZ8waWo2dLg/NgLgg==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.8.tgz",
"integrity": "sha512-Lv9Isi2EwkCTG1sRHNDi0uRNN1UGFdEThUAGFrydRmQZnraGLMjN8gahzg2FFnOizDl7LB2TykLUuiw833DSNg==",
"cpu": [
"arm64"
],
@ -3903,9 +3893,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.7.tgz",
"integrity": "sha512-tPQDV20fBjb26yWbPqT1ZSoDChomMCiXTKn4jupMSoMCFyU7+OJvIY1ryjqBuY622dEBJ8LnCDDWsnj1lX9nNQ==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.8.tgz",
"integrity": "sha512-fWfywfYIlSWtKoqWTjukTHLWV3ARaBRjXCC2Eo0l6KVpaqGY4c2y8snUjp1xpxUtpqwMvCvFWFaleMoz1Vhzlw==",
"cpu": [
"x64"
],
@ -3920,9 +3910,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.7.tgz",
"integrity": "sha512-sZqJpTyTZiknU9LLHuByg5GKTW+u3FqM7q7myequAXxKOpAFiOfXpY710FuMY+gjzSapyRbDXJlsTQtCyiTo5w==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.8.tgz",
"integrity": "sha512-SO+dyvjJV9G94bnmq2288Ke0BIdvrbSbvtPLaQdqjqHR83v5L2fWADyFO+1oecHo9Owsk8MxcXh1agGVPIKIqw==",
"cpu": [
"x64"
],
@ -3937,9 +3927,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.7.tgz",
"integrity": "sha512-PBgvULgeSswjd8cbZ91gdIcIDMdc3TUHV5XemEpxlqt9M8KoydJzkuB/Dt910jYdofOIaTWRL6adG9nJICvU4A==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.8.tgz",
"integrity": "sha512-ZSHggWiEblQNV69V0qUK5vuAtHP+I+S2eGrKGJ5lPgwgJeAd6GjLsVBN+Mqn2SPVfYM3BOpS9jX/zVg9RWQVDQ==",
"cpu": [
"arm"
],
@ -3954,9 +3944,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.7.tgz",
"integrity": "sha512-By/a2yeh+e9b+C67F88ndSwVJl2A3tcUDb29FbedDi+DZ4Mr07Oqw9Y1DrDrtHIDhIZ3bmmiL1dkH2YxrtV+zw==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.8.tgz",
"integrity": "sha512-xWpr6M0OZLDNsr7+bQz+3X7zcnDJZJ1N9gtBWCtfhkEtDjjxYEp+Lr5L5nc/yXlL4MyCHnn0uonGVXy3fhxaVA==",
"cpu": [
"arm64"
],
@ -3971,9 +3961,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.7.tgz",
"integrity": "sha512-WHYs3cpPEJb/ccyT20NOzopYQkl7JKncNBUbb77YFlwlXMVJLLV3nrXQKhr7DmZxz2ZXqjyUwsj2rdzd9stYdw==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.8.tgz",
"integrity": "sha512-5tz2IL7LN58ssGEq7h/staD7pu/izF/KeMWdlJ86WDe2Ah46LF3ET6ZGKTr5eZMrnEA0M9cVFuSPprKRHNgjeg==",
"cpu": [
"arm64"
],
@ -3988,9 +3978,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.7.tgz",
"integrity": "sha512-7bP1UyuX9kFxbOwkeIJhBZNevKYPXB6xZI37v09fqi6rqRJR8elybwjMUHm54GVP+UTtJ14ueB1K54Dy1tIO6w==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.8.tgz",
"integrity": "sha512-KSzMkhyrxAQyY2o194NKVKU9j/c+NFSoMvnHWFaNHKi3P1lb+Vq1UC19tLHrmxSkKapcMMu69D7+G1+FVGNDXQ==",
"cpu": [
"x64"
],
@ -4005,9 +3995,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.7.tgz",
"integrity": "sha512-gBQIV8nL/LuhARNGeroqzXymMzzW5wQzqlteVqOVoqwEfpHOP3GMird5pGFbnpY+NP0fOlsZGrxxOPQ4W/84bQ==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.8.tgz",
"integrity": "sha512-yFYKG5UtHTRimjtqxUWXBgI4Tc6NJe3USjRIVdlTczpLRxq/SFwgzGl5JbatCxgSRDPBFwRrNPxq+ukfQFGdrw==",
"cpu": [
"x64"
],
@ -4022,9 +4012,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.7.tgz",
"integrity": "sha512-aH530NFfx0kpQpvYMfWoeG03zGnRCMVlQG8do/5XeahYydz+6SIBxA1tl/cyITSJyWZHyVt6GVNkXeAD30v0Xg==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.8.tgz",
"integrity": "sha512-tndGujmCSba85cRCnQzXgpA2jx5gXimyspsUYae5jlPyLRG0RjXbDshFKOheVXU4TLflo7FSG8EHCBJ0EHTKdQ==",
"cpu": [
"arm64"
],
@ -4039,9 +4029,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.7.tgz",
"integrity": "sha512-8Cva6bbJN7ZJx320k7vxGGdU0ewmpfS5A4PudyzUuofdi8MgeINuiiWiPQ0VZCda/GX88K6qp+6UpDZNVr8HMQ==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.8.tgz",
"integrity": "sha512-T77jroAc0p4EHVVgTUiNeFn6Nj3jtD3IeNId2X+0k+N1XxfNipy81BEkYErpKLiOkNhpNFjPee8/ZVas29b2OQ==",
"cpu": [
"x64"
],
@ -4056,18 +4046,18 @@
}
},
"node_modules/@tailwindcss/postcss": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.7.tgz",
"integrity": "sha512-zXcKs1uGssVDlnsQ+iwrkul5GPKvsXPynGCuk/eXLx3DVhHlQKMpA6tXN2oO28x2ki1xRBTfadKiHy2taVvp7g==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.8.tgz",
"integrity": "sha512-SUwlrXjn1ycmUbA0o0n3Y0LqlXqxN5R8HR+ti+OBbRS79wl2seDmiypEs3xJCuQXe07ol81s1AmRMitBmPveJA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"@tailwindcss/node": "4.0.7",
"@tailwindcss/oxide": "4.0.7",
"@tailwindcss/node": "4.0.8",
"@tailwindcss/oxide": "4.0.8",
"lightningcss": "^1.29.1",
"postcss": "^8.4.41",
"tailwindcss": "4.0.7"
"tailwindcss": "4.0.8"
}
},
"node_modules/@tanstack/query-core": {
@ -4081,9 +4071,9 @@
}
},
"node_modules/@tanstack/react-query": {
"version": "5.66.7",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.66.7.tgz",
"integrity": "sha512-qd3q/tUpF2K1xItfPZddk1k/8pSXnovg41XyCqJgPoyYEirMBtB0sVEVVQ/CsAOngzgWtBPXimVf4q4kM9uO6A==",
"version": "5.66.9",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.66.9.tgz",
"integrity": "sha512-NRI02PHJsP5y2gAuWKP+awamTIBFBSKMnO6UVzi03GTclmHHHInH5UzVgzi5tpu4+FmGfsdT7Umqegobtsp23A==",
"license": "MIT",
"dependencies": {
"@tanstack/query-core": "5.66.4"
@ -6454,9 +6444,9 @@
}
},
"node_modules/chart.js": {
"version": "4.4.7",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
"integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
"version": "4.4.8",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz",
"integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@ -9369,9 +9359,9 @@
}
},
"node_modules/framer-motion": {
"version": "12.4.5",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.5.tgz",
"integrity": "sha512-9+8wglyIJFeUpVg4U8Ohvoo5x7zmvRqawWXhEUThcYdwL/5A1/OkLvQo68Zz5taUE11HKG/Ex+LPaN2+fMkRdA==",
"version": "12.4.7",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz",
"integrity": "sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==",
"license": "MIT",
"dependencies": {
"motion-dom": "^12.4.5",
@ -12096,6 +12086,16 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/jiti": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"dev": true,
"license": "MIT",
"bin": {
"jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/jose": {
"version": "4.15.9",
"resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz",
@ -18081,9 +18081,9 @@
}
},
"node_modules/tailwindcss": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.7.tgz",
"integrity": "sha512-yH5bPPyapavo7L+547h3c4jcBXcrKwybQRjwdEIVAd9iXRvy/3T1CC6XSQEgZtRySjKfqvo3Cc0ZF1DTheuIdA==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.8.tgz",
"integrity": "sha512-Me7N5CKR+D2A1xdWA5t5+kjjT7bwnxZOE6/yDI/ixJdJokszsn2n++mdU5yJwrsTpqFX2B9ZNMBJDwcqk9C9lw==",
"dev": true,
"license": "MIT"
},
@ -19386,9 +19386,9 @@
}
},
"node_modules/uuid": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz",
"integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==",
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"

View File

@ -28,14 +28,14 @@
"@supabase/auth-helpers-react": "^0.5.0",
"@supabase/ssr": "^0.5.2",
"@supabase/supabase-js": "^2.48.1",
"@tanstack/react-query": "^5.66.7",
"@tanstack/react-query": "^5.66.9",
"@vercel/speed-insights": "^1.2.0",
"ahooks": "^3.8.4",
"antd": "5.23.3",
"antd-style": "^3.7.1",
"axios": "^1.7.9",
"canvas-confetti": "^1.9.3",
"chart.js": "^4.4.7",
"chart.js": "^4.4.8",
"chartjs": "^0.3.24",
"chartjs-adapter-dayjs-4": "^1.0.4",
"chartjs-chart-geo": "^4.3.4",
@ -59,7 +59,7 @@
"echarts-stat": "^1.2.0",
"email-validator": "^2.0.4",
"font-color-contrast": "^11.1.0",
"framer-motion": "^12.4.4",
"framer-motion": "^12.4.7",
"html2canvas": "^1.4.1",
"js-cookie": "^3.0.5",
"jspdf": "^2.5.2",
@ -96,11 +96,11 @@
"split-pane-react": "^0.1.3",
"tailwind-merge": "^3.0.1",
"utility-types": "^3.11.0",
"uuid": "^11.0.5",
"uuid": "^11.1.0",
"virtua": "^0.40.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.0.7",
"@tailwindcss/postcss": "^4.0.8",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
"@testing-library/user-event": "^14.6.1",
@ -128,7 +128,7 @@
"monaco-editor-webpack-plugin": "^7.1.0",
"postcss": "8.5.3",
"sass": "^1.83.4",
"tailwindcss": "^4.0.7",
"tailwindcss": "^4.0.8",
"ts-jest": "^29.2.5",
"typescript": "^5"
},

View File

@ -4,7 +4,7 @@ import { QueryClient } from '@tanstack/react-query';
import { getListChats, getListChats_server, getChat, getChat_server } from './requests';
import type { BusterChatListItem } from '@/api/asset_interfaces';
import { queryKeys } from '@/api/query_keys';
import { updateChatToIChat } from '@/utils/chat';
import { updateChatToIChat } from '@/lib/chat';
export const useGetListChats = (params?: Parameters<typeof getListChats>[0]) => {
const queryFn = useMemoizedFn((): Promise<BusterChatListItem[]> => {

View File

@ -23,7 +23,7 @@ import type {
GetDatasetGroupPermissionGroupsResponse,
GetDatasetGroupUsersResponse
} from '../../asset_interfaces';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import { queryKeys } from '@/api/query_keys';
export const useListDatasetGroups = () => {

View File

@ -11,7 +11,7 @@ import type { InferBusterSocketResponseData } from './types';
import { useBusterWebSocket } from '@/context/BusterWebSocket';
import { useEffect, useMemo, useRef } from 'react';
import { useSocketQueryOn } from './useSocketQueryOn';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import { useMemoizedFn } from 'ahooks';
export const useSocketQueryEmitOn = <

View File

@ -1,5 +1,5 @@
import { ShareAssetType, VerificationStatus, BusterChatListItem } from '@/api/asset_interfaces';
import { makeHumanReadble, formatDate } from '@/utils';
import { makeHumanReadble, formatDate } from '@/lib';
import React, { memo, useMemo, useRef, useState } from 'react';
import { StatusBadgeIndicator, getShareStatus } from '../../../../components/features/Lists';
import { BusterUserAvatar, Text } from '@/components/ui';

View File

@ -5,7 +5,7 @@ import { Button, Input } from 'antd';
import { Title, Text } from '@/components/ui';
import { AnimatePresence, motion } from 'framer-motion';
import { useUserConfigContextSelector } from '@/context/Users';
import { inputHasText } from '@/utils';
import { inputHasText } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { useAppLayoutContextSelector } from '@/context/BusterAppLayout';
import { BusterAppRoutes } from '@/routes/busterRoutes/busterAppRoutes';

View File

@ -2,7 +2,7 @@ import React, { useMemo } from 'react';
import { Button } from 'antd';
import type { BusterApiKeyListItem } from '@/api/asset_interfaces';
import { AppMaterialIcons } from '@/components/ui';
import { formatDate } from '@/utils/date';
import { formatDate } from '@/lib/date';
import { Text } from '@/components/ui';
import { useMemoizedFn } from 'ahooks';

View File

@ -4,7 +4,7 @@ import type { DataSource } from '@/api/asset_interfaces';
import { AppMaterialIcons, PulseLoader } from '@/components/ui';
import { AppDataSourceIcon } from '@/components/ui';
import { useAntToken } from '@/styles/useAntToken';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import { Button, Divider, Dropdown, MenuProps } from 'antd';
import React from 'react';
import { DataSourceFormContent } from './_DatasourceFormContent';

View File

@ -4,7 +4,7 @@ import { Form, Input, InputNumber, Select } from 'antd';
import { useKeyPress } from 'ahooks';
import { AppSelectTagInput } from '@/components/ui/select/AppSelectTagInput';
import { FormWrapper, FormWrapperHandle } from './FormWrapper';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import {
DatasourceCreateCredentials,
PostgresCreateCredentials

View File

@ -8,7 +8,7 @@ import type { DataSource } from '@/api/asset_interfaces';
import { AppSelectTagInput } from '@/components/ui/select/AppSelectTagInput';
import { Form, Input } from 'antd';
import { RuleObject } from 'antd/es/form';
import { makeHumanReadble } from '@/utils';
import { makeHumanReadble } from '@/lib';
export const SnowflakeForm: React.FC<{
dataSource?: DataSource;

View File

@ -4,7 +4,7 @@ import React from 'react';
import { SettingsPageHeader } from '../../_components/SettingsPageHeader';
import { useUserConfigContextSelector } from '@/context/Users';
import { createStyles } from 'antd-style';
import { formatDate } from '@/utils/date';
import { formatDate } from '@/lib/date';
import { Text, Title } from '@/components/ui';
import { BusterUserAvatar } from '@/components/ui';
import { Card } from 'antd';

View File

@ -3,7 +3,7 @@
import React, { useMemo, useState } from 'react';
import { Button, Divider, Input, Result } from 'antd';
import { User } from '@supabase/auth-js';
import { inputHasText, isValidEmail } from '@/utils';
import { inputHasText, isValidEmail } from '@/lib';
import { useKeyPress, useMemoizedFn } from 'ahooks';
import Link from 'next/link';
import { BusterRoutes, createBusterRoute } from '@/routes/busterRoutes';

View File

@ -1,7 +1,7 @@
'use client';
import { createBusterRoute, BusterRoutes } from '@/routes';
import { isValidEmail, timeout } from '@/utils';
import { isValidEmail, timeout } from '@/lib';
import { Button, Input, Result } from 'antd';
import Link from 'next/link';
import React, { useState } from 'react';

View File

@ -3,7 +3,7 @@ import { Modal, Button, Divider, Input, InputRef } from 'antd';
import { AppMaterialIcons, AppSegmented, asset_typeToIcon, Text } from '@/components/ui';
import { BusterList, BusterListColumn, BusterListRow } from '@/components/ui/list';
import { useMemoizedFn, useThrottleFn } from 'ahooks';
import { boldHighlights, formatDate } from '@/utils';
import { boldHighlights, formatDate } from '@/lib';
import {
type BusterDashboardResponse,
type BusterSearchResult,

View File

@ -6,7 +6,7 @@ import { AppModal } from '@/components/ui';
import { useBusterCollectionIndividualContextSelector } from '@/context/Collections';
import { useAppLayoutContextSelector } from '@/context/BusterAppLayout';
import { BusterRoutes } from '@/routes';
import { inputHasText } from '@/utils';
import { inputHasText } from '@/lib';
import { useMemoizedFn } from 'ahooks';
export const NewCollectionModal: React.FC<{

View File

@ -4,7 +4,7 @@ import { AppMaterialIcons } from '@/components/ui';
import { useMemoizedFn, useMount, useThrottleFn } from 'ahooks';
import { useAntToken } from '@/styles/useAntToken';
import { useBusterNewChatContextSelector } from '@/context/Chats';
import { inputHasText, timeout } from '@/utils';
import { inputHasText, timeout } from '@/lib';
import { useBusterSearchContextSelector } from '@/context/Search';
import type { BusterSearchResult } from '@/api/asset_interfaces';
import { useBusterNotifications } from '@/context/BusterNotifications';

View File

@ -1,6 +1,6 @@
import type { BusterSearchResult } from '@/api/asset_interfaces';
import { CircleSpinnerLoader } from '@/components/ui';
import { boldHighlights } from '@/utils/element';
import { boldHighlights } from '@/lib/element';
import { createStyles } from 'antd-style';
import React, { useEffect } from 'react';
import { motion } from 'framer-motion';

View File

@ -18,7 +18,7 @@ import { useBusterDashboardContextSelector } from '@/context/Dashboards';
import { useBusterCollectionIndividualContextSelector } from '@/context/Collections';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { useStyles } from './useStyles';
import { inputHasText } from '@/utils/text';
import { inputHasText } from '@/lib/text';
export const ShareMenuContentBody: React.FC<{
selectedOptions: ShareMenuTopBarOptions;

View File

@ -5,7 +5,7 @@ import { Button, Divider, DatePicker, Input, Space, Switch } from 'antd';
import { AppMaterialIcons, PulseLoader } from '@/components/ui';
import { useMemoizedFn } from 'ahooks';
import { createStyles } from 'antd-style';
import { createDayjsDate } from '@/utils/date';
import { createDayjsDate } from '@/lib/date';
import { useBusterDashboardContextSelector } from '@/context/Dashboards';
import { BusterRoutes, createBusterRoute } from '@/routes';
import { useBusterCollectionIndividualContextSelector } from '@/context/Collections';

View File

@ -6,7 +6,7 @@ import {
} from '@/components/ui/charts/interfaces';
import type { SingleAxisComponentOption } from 'echarts';
import React, { useMemo } from 'react';
import { isNumericColumnType, isNumericColumnStyle } from '@/utils';
import { isNumericColumnType, isNumericColumnStyle } from '@/lib';
import { formatXAxisLabel } from '@/components/ui/charts/commonHelpers';
export const useXAxisTickOptions = ({

View File

@ -1,4 +1,4 @@
import { determineFontColorContrast } from '@/utils';
import { determineFontColorContrast } from '@/lib';
import { DEFAULT_CHART_THEME } from '../../../configColors';
import { busterAppStyleConfig } from '@/styles/busterAntDStyleConfig';

View File

@ -8,7 +8,7 @@ import {
} from '../../../interfaces';
import { getYAxisColumnNames, seriesNameGenerator } from './helpers';
import { DEFAULT_BAR_ROUNDNESS } from '@/api/asset_interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { labelContrastFormatter } from '../useEChartsTheme/buster_light_theme';
import { yAxisSimilar } from '@/components/ui/charts/commonHelpers';

View File

@ -10,7 +10,7 @@ import { BarAndLineAxis, ChartEncodes, ComboChartAxis } from '../../../interface
import { ColumnSettings } from '../../../interfaces';
import { getYAxisColumnNames, seriesNameGenerator } from './helpers';
import { DEFAULT_COLUMN_SETTINGS } from '@/api/asset_interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { createGradient } from './LineChartSeriesBuilder';
const columnVisualizationToSeriesType: Record<

View File

@ -11,7 +11,7 @@ import {
ColumnLabelFormat
} from '../../../interfaces';
import isEmpty from 'lodash/isEmpty';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { graphic } from 'echarts';
import set from 'lodash/set';
import { getYAxisColumnNames, seriesNameGenerator } from './helpers';

View File

@ -6,8 +6,8 @@ import {
PieChartAxis
} from '../../../interfaces';
import { busterAppStyleConfig } from '@/styles/busterAntDStyleConfig';
import { DataFrameOperations } from '@/utils/math';
import { formatLabel } from '@/utils';
import { DataFrameOperations } from '@/lib/math';
import { formatLabel } from '@/lib';
import { DatasetOption, extractFieldsFromChain } from '../../../chartHooks';
import busterLightTheme, { labelContrastFormatter } from '../useEChartsTheme/buster_light_theme';

View File

@ -3,7 +3,7 @@ import {
ColumnLabelFormat,
IColumnLabelFormat
} from '@/components/ui/charts/interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import type { SeriesOption, MarkLineComponentOption } from 'echarts';
import { useMemo } from 'react';
import { extractFieldsFromChain } from '../../../chartHooks';

View File

@ -11,7 +11,7 @@ import {
IColumnLabelFormat,
Trendline
} from '@/components/ui/charts/interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { DATASET_IDS } from '../../../chartHooks';
import type { TrendlineDataset } from '../../../chartHooks';
import busterLightTheme from '../useEChartsTheme/buster_light_theme';

View File

@ -3,7 +3,7 @@ import { formatChartLabelDelimiter, formatChartValueDelimiter } from '../../../c
import React, { useMemo } from 'react';
import { TooltipFormatterParams } from './interfaces';
import { busterAppStyleConfig } from '@/styles';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { appendToKeyValueChain, extractFieldsFromChain } from '../../../chartHooks';
import last from 'lodash/last';
import type { ITooltipItem } from '../../../BusterChartTooltip/interfaces';

View File

@ -3,7 +3,7 @@ import { FontOptions, OutLabelsOptions } from './OutLabelsOptions';
import OutLabelsContext from './OutLabelsContext';
import { ChartArea, FontSpec } from 'chart.js';
import { defaults } from 'chart.js';
import { determineFontColorContrast } from '@/utils';
import { determineFontColorContrast } from '@/lib';
// Same as options but we make sure we have defaults
//

View File

@ -1,4 +1,4 @@
import { determineFontColorContrast, formatLabel } from '@/utils';
import { determineFontColorContrast, formatLabel } from '@/lib';
import type { Context } from 'chartjs-plugin-datalabels';
import { formatChartLabelDelimiter } from '../../commonHelpers';
import { extractFieldsFromChain, appendToKeyValueChain } from '../../chartHooks';

View File

@ -4,8 +4,8 @@ import type { ChartType as ChartJSChartType } from 'chart.js';
import type { DeepPartial } from 'utility-types';
import type { PluginChartOptions } from 'chart.js';
import { AnnotationPluginOptions } from 'chartjs-plugin-annotation';
import { ArrayOperations } from '@/utils/math';
import { formatLabel } from '@/utils/columnFormatter';
import { ArrayOperations } from '@/lib/math';
import { formatLabel } from '@/lib/columnFormatter';
import { busterAppStyleConfig } from '@/styles/busterAntDStyleConfig';
import { getPieInnerLabelTitle } from '../../../commonHelpers';
import { ChartJSOrUndefined } from '../../core/types';
@ -14,7 +14,7 @@ import {
BusterChartProps,
ColumnLabelFormat
} from '@/components/ui/charts/interfaces';
import { determineFontColorContrast } from '@/utils/colors';
import { determineFontColorContrast } from '@/lib/colors';
import { Context } from 'chartjs-plugin-datalabels';
const token = busterAppStyleConfig.token!;

View File

@ -8,7 +8,7 @@ import { AnnotationOptions, AnnotationPluginOptions } from 'chartjs-plugin-annot
import { useMemo } from 'react';
import { ChartOptions, PluginChartOptions } from 'chart.js';
import { busterAppStyleConfig } from '@/styles/busterAntDStyleConfig';
import { formatLabel } from '@/utils/columnFormatter';
import { formatLabel } from '@/lib/columnFormatter';
import { yAxisSimilar } from '@/components/ui/charts/commonHelpers';
import { extractFieldsFromChain } from '@/components/ui/charts/chartHooks';
import { defaultLabelOptionConfig } from '../useChartSpecificOptions/labelOptionConfig';

View File

@ -5,7 +5,7 @@ import type { Chart, TooltipItem, ChartType as ChartJSChartType } from 'chart.js
import type { ITooltipItem } from '@/components/ui/charts/BusterChartTooltip/interfaces';
import { barAndLineTooltipHelper } from './barAndLineTooltipHelper';
import { pieTooltipHelper } from './pieTooltipHelper';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { scatterTooltipHelper } from './scatterTooltipHelper';
export const BusterChartJSTooltip: React.FC<{

View File

@ -1,6 +1,6 @@
import { extractFieldsFromChain } from '@/components/ui/charts/chartHooks';
import type { BusterChartProps } from '@/components/ui/charts/interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import type { Chart } from 'chart.js';
export const getPercentage = (

View File

@ -3,7 +3,7 @@ import { BusterChartConfigProps } from '@/components/ui/charts/interfaces';
import type { ChartDataset, TooltipItem, ChartTypeRegistry } from 'chart.js';
import { appendToKeyValueChain, extractFieldsFromChain } from '@/components/ui/charts/chartHooks';
import { formatChartLabel } from '../../../helpers';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
export const scatterTooltipHelper = (
datasets: ChartDataset[],

View File

@ -14,7 +14,7 @@ import { BusterChartJSTooltip } from './BusterChartJSTooltip';
import { busterAppStyleConfig } from '@/styles';
import { DatasetOption, extractFieldsFromChain } from '@/components/ui/charts/chartHooks';
import React from 'react';
import { isNumericColumnType } from '@/utils';
import { isNumericColumnType } from '@/lib';
const token = busterAppStyleConfig.token!;

View File

@ -13,7 +13,7 @@ import { DeepPartial } from 'utility-types';
import type { ScaleChartOptions, Scale, GridLineOptions } from 'chart.js';
import { useXAxisTitle } from '@/components/ui/charts/commonHelpers/useXAxisTitle';
import { useIsStacked } from './useIsStacked';
import { formatLabel, isNumericColumnType } from '@/utils';
import { formatLabel, isNumericColumnType } from '@/lib';
import isDate from 'lodash/isDate';
export const useXAxis = ({

View File

@ -4,7 +4,7 @@ import { SeriesBuilderProps } from './interfaces';
import { extractFieldsFromChain } from '@/components/ui/charts/chartHooks';
import { DEFAULT_COLUMN_SETTINGS, ENABLED_DOTS_ON_LINE_SIZE } from '@/api/asset_interfaces';
import { barBuilder } from './barSeriesBuilder';
import { createDayjsDate } from '@/utils/date';
import { createDayjsDate } from '@/lib/date';
import { formatChartLabelDelimiter } from '@/components/ui/charts/commonHelpers';
import { lineBuilder } from './lineSeriesBuilder';
import { ColumnSettings } from '@/components/ui/charts/interfaces';

View File

@ -4,7 +4,7 @@ import type { ChartProps } from '../../core';
import { SeriesBuilderProps } from './interfaces';
import { LabelBuilderProps } from './useSeriesOptions';
import { formatChartLabelDelimiter } from '../../../commonHelpers';
import { addOpacityToColor, createDayjsDate } from '@/utils';
import { addOpacityToColor, createDayjsDate } from '@/lib';
import { defaultLabelOptionConfig } from '../useChartSpecificOptions/labelOptionConfig';
import { DEFAULT_COLUMN_SETTINGS } from '@/api/asset_interfaces';
import type { ColumnSettings } from '@/components/ui/charts/interfaces';

View File

@ -3,9 +3,9 @@ import { LabelBuilderProps } from './useSeriesOptions';
import { SeriesBuilderProps } from './interfaces';
import { ScriptableContext } from 'chart.js';
import { DEFAULT_CHART_CONFIG } from '@/api/asset_interfaces';
import { addOpacityToColor } from '@/utils/colors';
import { isDateColumnType } from '@/utils/messages';
import { createDayjsDate } from '@/utils/date';
import { addOpacityToColor } from '@/lib/colors';
import { isDateColumnType } from '@/lib/messages';
import { createDayjsDate } from '@/lib/date';
export const scatterSeriesBuilder_data = ({
selectedDataset,

View File

@ -7,7 +7,7 @@ import type {
import { AnnotationOptions, AnnotationPluginOptions } from 'chartjs-plugin-annotation';
import { useMemo } from 'react';
import { defaultLabelOptionConfig } from '../useChartSpecificOptions/labelOptionConfig';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { ChartProps } from '../../core';
import { TypeToLabel } from './config';

View File

@ -1,9 +1,9 @@
import { BusterChartLegendItem } from '@/components/ui/charts/BusterChartLegend';
import { BusterChartProps, ShowLegendHeadline } from '@/components/ui/charts/interfaces';
import { DataFrameOperations } from '@/utils/math';
import { formatLabel } from '@/utils/columnFormatter';
import { DataFrameOperations } from '@/lib/math';
import { formatLabel } from '@/lib/columnFormatter';
import { DatasetOption, extractFieldsFromChain } from '../chartHooks';
import { createDayjsDate, getBestDateFormat } from '@/utils/date';
import { createDayjsDate, getBestDateFormat } from '@/lib/date';
import type { IBusterMetricChartConfig } from '@/api/asset_interfaces';
export const addLegendHeadlines = (

View File

@ -1,6 +1,6 @@
import React, { useMemo } from 'react';
import { useMount } from 'ahooks';
import { formatLabel, JsonDataFrameOperationsSingle, timeout } from '@/utils';
import { formatLabel, JsonDataFrameOperationsSingle, timeout } from '@/lib';
import { motion, AnimatePresence } from 'framer-motion';
import { Title } from '@/components/ui';
import { ColumnLabelFormat, MetricChartProps } from '../interfaces';

View File

@ -1,7 +1,7 @@
import React, { useCallback } from 'react';
import { BusterTableChartConfig } from './interfaces';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { formatLabel } from '@/utils/columnFormatter';
import { formatLabel } from '@/lib/columnFormatter';
import isEqual from 'lodash/isEqual';
import type { BusterChartPropsBase } from '../interfaces';
import { type IBusterMetricChartConfig, DEFAULT_CHART_CONFIG } from '@/api/asset_interfaces';

View File

@ -1,7 +1,7 @@
'use client';
import { BusterChartProps, ChartType, BarSortBy, ColumnLabelFormat } from '../../interfaces';
import { createDayjsDate } from '@/utils/date';
import { createDayjsDate } from '@/lib/date';
import { extractFieldsFromChain, appendToKeyValueChain } from './groupingHelpers';
import { DATASET_IDS, GROUPING_SEPARATOR } from './config';
import { DatasetOption } from './interfaces';

View File

@ -17,7 +17,7 @@ import {
createDayjsDate,
DataFrameOperations,
calculateLinearSlopeByDate
} from '@/utils';
} from '@/lib';
import { extractFieldsFromChain } from './groupingHelpers';
import last from 'lodash/last';
import { DatasetOption } from './interfaces';

View File

@ -1,4 +1,4 @@
import { formatLabel } from '@/utils/columnFormatter';
import { formatLabel } from '@/lib/columnFormatter';
import pick from 'lodash/pick';
import isEqual from 'lodash/isEqual';
import isNumber from 'lodash/isNumber';

View File

@ -1,4 +1,4 @@
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import isEmpty from 'lodash/isEmpty';
import type { ColumnLabelFormat } from '../interfaces';
import { extractFieldsFromChain } from '../chartHooks';

View File

@ -1,6 +1,6 @@
import { useMemo } from 'react';
import { BusterChartConfigProps, ChartEncodes } from '../interfaces';
import { formatLabel } from '@/utils/columnFormatter';
import { formatLabel } from '@/lib/columnFormatter';
import { AXIS_TITLE_SEPARATOR } from './axisHelper';
import { truncateWithEllipsis } from './titleHelpers';

View File

@ -1,4 +1,4 @@
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { useMemo } from 'react';
import { AXIS_TITLE_SEPARATOR } from '@/components/ui/charts/commonHelpers/axisHelper';
import { BusterChartConfigProps } from '../interfaces';

View File

@ -1,6 +1,6 @@
import { useMemo } from 'react';
import { BusterChartConfigProps, ChartEncodes } from '../interfaces';
import { formatLabel } from '@/utils/columnFormatter';
import { formatLabel } from '@/lib/columnFormatter';
import { AXIS_TITLE_SEPARATOR } from '@/components/ui/charts/commonHelpers/axisHelper';
import { truncateWithEllipsis } from './titleHelpers';

View File

@ -1,6 +1,6 @@
import React, { useMemo } from 'react';
import { Avatar, AvatarProps } from 'antd';
import { getFirstTwoCapitalizedLetters } from '@/utils/text';
import { getFirstTwoCapitalizedLetters } from '@/lib/text';
import { AppTooltip } from '../tooltip';
import type { GroupProps } from 'antd/es/avatar';
import { useBusterStylesContext } from '@/context/BusterStyles/BusterStyles';

View File

@ -1,4 +1,4 @@
import { getNow, isDateAfter, isDateBefore, isDateSame } from '@/utils/date';
import { getNow, isDateAfter, isDateBefore, isDateSame } from '@/lib/date';
import { useMemo } from 'react';
type ListItem = {

View File

@ -2,7 +2,7 @@
import React, { useMemo, useRef, useState } from 'react';
import { Button, Divider, Popover, Select } from 'antd';
import { CircleSpinnerLoaderContainer } from '../loaders/CircleSpinnerLoaderContainer';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import { useMemoizedFn, useMount } from 'ahooks';
import { createStyles } from 'antd-style';
import isEqual from 'lodash/isEqual';
@ -12,7 +12,7 @@ const NewColorThemeModal = dynamic(() => import('./NewColorThemeModal'), {
ssr: false,
loading: () => (
<div
className="fixed bottom-0 left-0 right-0 top-0 z-10 h-full w-full"
className="fixed top-0 right-0 bottom-0 left-0 z-10 h-full w-full"
style={{
background: `rgba(0, 0, 0, 0.125)`
}}>

View File

@ -3,7 +3,7 @@ import { ConfigProvider, Select, Tag } from 'antd';
import type { SelectProps } from 'antd';
import type { CustomTagProps } from 'rc-select/lib/BaseSelect';
import { createStyles } from 'antd-style';
import { getPredictableItemBasedOnText } from '@/utils';
import { getPredictableItemBasedOnText } from '@/lib';
import { AppMaterialIcons } from '../icons';
import { useMemoizedFn } from 'ahooks';

View File

@ -1,6 +1,6 @@
import set from 'lodash/set';
import clamp from 'lodash/clamp';
import { makeHumanReadble } from '@/utils/text';
import { makeHumanReadble } from '@/lib/text';
export const MAX_WIDTH = 950;
export const MIN_WIDTH = 100;

View File

@ -1,4 +1,4 @@
import { updateChatToIChat } from '@/utils/chat';
import { updateChatToIChat } from '@/lib/chat';
import { useSocketQueryEmitOn } from '@/api/buster_socket_query';
import { queryKeys } from '@/api/query_keys';
import { useQueryClient } from '@tanstack/react-query';

View File

@ -6,7 +6,7 @@ import { useMemoizedFn } from 'ahooks';
import sample from 'lodash/sample';
import last from 'lodash/last';
import { useBusterChatContextSelector } from '../ChatProvider';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import random from 'lodash/random';
export const useAutoAppendThought = () => {

View File

@ -6,7 +6,7 @@ import {
ChatEvent_GeneratingResponseMessage,
ChatEvent_GeneratingTitle
} from '@/api/buster_socket/chats';
import { updateChatToIChat } from '@/utils/chat';
import { updateChatToIChat } from '@/lib/chat';
import { useAutoAppendThought } from './useAutoAppendThought';
import { useAppLayoutContextSelector } from '@/context/BusterAppLayout';
import { BusterRoutes } from '@/routes';

View File

@ -1,6 +1,6 @@
import { useBusterNotifications } from '@/context/BusterNotifications';
import { useSocketQueryMutation } from '@/api/buster_socket_query';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { queryKeys } from '@/api/query_keys';

View File

@ -5,7 +5,7 @@ import {
type SimplifiedColumnType
} from '@/api/asset_interfaces';
import type { ColumnLabelFormat, IColumnLabelFormat } from '@/components/ui/charts';
import { isDateColumnType, isNumericColumnType, simplifyColumnType } from '@/utils/messages';
import { isDateColumnType, isNumericColumnType, simplifyColumnType } from '@/lib/messages';
export const createDefaultColumnLabelFormats = (
columnLabelFormats: Record<string, IColumnLabelFormat> | undefined,

View File

@ -1,6 +1,6 @@
import isEmpty from 'lodash/isEmpty';
import { IBusterMetric } from '../interfaces';
import { isNumericColumnType } from '@/utils';
import { isNumericColumnType } from '@/lib';
import { BusterChartConfigProps } from '@/components/ui/charts';
import { defaultIBusterMetric } from '../config';
import { BusterMetricData } from '@/context/MetricData';

View File

@ -5,7 +5,7 @@ import {
DEFAULT_COLUMN_SETTINGS,
IBusterMetricChartConfig
} from '@/api/asset_interfaces';
import { getChangedValues } from '@/utils/objects';
import { getChangedValues } from '@/lib/objects';
import { IBusterMetric } from '../interfaces';
import isEqual from 'lodash/isEqual';
import {

View File

@ -4,7 +4,7 @@ import React, { PropsWithChildren, useLayoutEffect, useRef, useState } from 'rea
import { UseSupabaseContextType } from './useSupabaseContext';
import { useMemoizedFn } from 'ahooks';
import { User } from '@supabase/supabase-js';
import { millisecondsFromUnixTimestamp } from '@/utils';
import { millisecondsFromUnixTimestamp } from '@/lib';
import {
createContext,
useContextSelector,

View File

@ -1,5 +1,5 @@
import { useMemoizedFn } from 'ahooks';
import { timeout } from '@/utils';
import { timeout } from '@/lib';
import { useBusterNotifications } from '../BusterNotifications';
import { inviteUser as inviteUserRest } from '@/api/buster_rest';

View File

@ -7,7 +7,7 @@ import {
import React, { useMemo, useState } from 'react';
import { AppMaterialIcons, BusterUserAvatar } from '@/components/ui';
import { createBusterRoute, BusterRoutes } from '@/routes';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import {
BusterCollection,
BusterCollectionItemAsset,

View File

@ -18,7 +18,7 @@ import { Text } from '@/components/ui';
import { useAntToken } from '@/styles/useAntToken';
import { useMemoizedFn } from 'ahooks';
import { BreadcrumbSeperator } from '@/components/ui/breadcrumb';
import { measureTextWidth } from '@/utils/canvas';
import { measureTextWidth } from '@/lib/canvas';
export const CollectionsIndividualHeader: React.FC<{
openAddTypeModal: boolean;

View File

@ -2,7 +2,7 @@
import React, { useMemo, useState } from 'react';
import { AppContent, BusterUserAvatar } from '@/components/ui';
import { formatDate, makeHumanReadble } from '@/utils';
import { formatDate, makeHumanReadble } from '@/lib';
import { BusterRoutes, createBusterRoute } from '@/routes';
import { useBusterCollectionListContextSelector } from '@/context/Collections';
import {

View File

@ -4,7 +4,7 @@ import React, { useMemo, useState } from 'react';
import { AppContent } from '@/components/ui/layout/AppContent';
import { useBusterDashboardContextSelector } from '@/context/Dashboards';
import { BusterUserAvatar } from '@/components/ui';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import { BusterList, BusterListColumn, BusterListRow } from '@/components/ui/list';
import { BusterRoutes, createBusterRoute } from '@/routes';
import { getShareStatus } from '@/components/features/Lists';

View File

@ -3,7 +3,7 @@
import React, { useState, useMemo } from 'react';
import { AppContent } from '@/components/ui/layout/AppContent';
import { BusterUserAvatar } from '@/components/ui';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import { BusterList, BusterListColumn, BusterListRow } from '@/components/ui/list';
import { BusterRoutes, createBusterRoute } from '@/routes';
import type { BusterDatasetListItem } from '@/api/asset_interfaces';

View File

@ -8,7 +8,7 @@ import { Button, Divider } from 'antd';
import { AppMaterialIcons } from '@/components/ui';
import { AnimatePresence, motion } from 'framer-motion';
import { CollapseDelete } from '../../Common/CollapseDelete';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { ColumnMetaData } from '@/api/asset_interfaces';
import { TrendlineColumnId } from './EditTrendlineColumnId';
import { TrendlineColorPicker } from './EditTrendlineColorPicker';

View File

@ -1,5 +1,5 @@
import type { ColumnMetaData, IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { Select } from 'antd';
import React, { useMemo } from 'react';
import { LabelAndInput } from '../../Common';

View File

@ -5,7 +5,7 @@ import { LoopTrendline } from './EditTrendline';
import React, { useMemo } from 'react';
import type { ChartType, Trendline } from '@/components/ui/charts';
import { IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { isDateColumnType, isNumericColumnType } from '@/utils';
import { isDateColumnType, isNumericColumnType } from '@/lib';
import { AppMaterialIcons, AppTooltip } from '@/components/ui';
export const EditTrendlineOption = React.memo(

View File

@ -1,6 +1,6 @@
import React, { useMemo } from 'react';
import { DEFAULT_CHART_COLORS, DISABLED_CHART_COLORS } from '../config';
import { addOpacityToColor } from '@/utils/colors';
import { addOpacityToColor } from '@/lib/colors';
export const ChartIcon_AreaRelative: React.FC<{ colors?: string[]; disabled?: boolean }> = ({
colors: colorsProp = DEFAULT_CHART_COLORS,

View File

@ -9,7 +9,7 @@ import {
getDefaultQuarterOptions
} from './dateConfig';
import first from 'lodash/last';
import { formatDate, getNow } from '@/utils/date';
import { formatDate, getNow } from '@/lib/date';
import { useMemoizedFn } from 'ahooks';
export const EditDateFormat: React.FC<{

View File

@ -5,7 +5,7 @@ import { AppSegmented } from '@/components/ui';
import { ColumnTypeIcon } from '../config';
import { useEditAppSegmented } from './useEditAppSegmented';
import { createStyles } from 'antd-style';
import { isDateColumnType, isNumericColumnType } from '@/utils';
import { isDateColumnType, isNumericColumnType } from '@/lib';
export const EditLabelStyle: React.FC<{
onUpdateColumnConfig: (columnLabelFormat: Partial<IColumnLabelFormat>) => void;

View File

@ -3,7 +3,7 @@ import type { IColumnLabelFormat } from '@/components/ui/charts/interfaces/colum
import { useMemoizedFn } from 'ahooks';
import React, { useMemo } from 'react';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { EditTitle } from './EditTitle';
import { EditDisplayAs } from './EditDisplayAs';
import { BarAndLineAxis, ChartEncodes, ChartType, ColumnSettings } from '@/components/ui/charts';

View File

@ -1,4 +1,4 @@
import { getNow, formatDate } from '@/utils';
import { getNow, formatDate } from '@/lib';
export const getDefaultDateOptions = (now: Date) => {
return [

View File

@ -5,7 +5,7 @@ import { DropZoneInternal } from './interfaces';
import { useSelectAxisContextSelector } from '../useSelectAxisContext';
import { ChartType, IColumnLabelFormat } from '@/components/ui/charts';
import { Active } from '@dnd-kit/core';
import { isNumericColumnStyle, isNumericColumnType } from '@/utils';
import { isNumericColumnStyle, isNumericColumnType } from '@/lib';
interface ZoneError {
error: boolean;

View File

@ -1,5 +1,5 @@
import { IColumnLabelFormat } from '@/components/ui/charts';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import React, { useMemo } from 'react';
import { Text } from '@/components/ui';
import { createStyles } from 'antd-style';

View File

@ -2,7 +2,7 @@ import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import React, { useMemo } from 'react';
import { useSelectAxisContextSelector } from '../useSelectAxisContext';
import { ColumnLabelFormat } from '@/components/ui/charts';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { EditShowAxisTitle } from './EditShowAxisTitle';

View File

@ -4,7 +4,7 @@ import { SelectAxisContainerId } from '../config';
import { EditShowAxisTitle } from './EditShowAxisTitle';
import type { ColumnLabelFormat, ComboChartAxis } from '@/components/ui/charts/interfaces';
import { AXIS_TITLE_SEPARATOR } from '@/components/ui/charts/commonHelpers';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { EditShowAxisLabel } from './EditShowAxisLabel';

View File

@ -3,7 +3,7 @@ import { useSelectAxisContextSelector } from '../useSelectAxisContext';
import { SelectAxisContainerId } from '../config';
import { EditShowAxisTitle } from './EditShowAxisTitle';
import type { ColumnLabelFormat } from '@/components/ui/charts/interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { EditShowAxisLabel } from './EditShowAxisLabel';

View File

@ -11,7 +11,7 @@ import {
} from './SelectedChartTypeMethod';
import { useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { useMemoizedFn } from 'ahooks';
import { addOpacityToColor, NUMBER_TYPES } from '@/utils';
import { addOpacityToColor, NUMBER_TYPES } from '@/lib';
export interface SelectChartTypeProps {
selectedChartType: ChartType;

View File

@ -1,7 +1,7 @@
import type { IBusterMetricChartConfig, ColumnMetaData } from '@/api/asset_interfaces';
import { AppPopover, AppMaterialIcons } from '@/components/ui';
import type { IColumnLabelFormat, DerivedMetricTitle } from '@/components/ui/charts';
import { formatLabel, isNumericColumnType, isNumericColumnStyle } from '@/utils';
import { formatLabel, isNumericColumnType, isNumericColumnStyle } from '@/lib';
import { useMemoizedFn } from 'ahooks';
import { Input, Button, Divider, Switch, Select } from 'antd';
import { createStyles } from 'antd-style';

View File

@ -1,5 +1,5 @@
import { IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { isNumericColumnStyle, isNumericColumnType } from '@/utils';
import { isNumericColumnStyle, isNumericColumnType } from '@/lib';
import React, { useMemo } from 'react';
import { LabelAndInput } from '../../Common';
import { Button, Select } from 'antd';

View File

@ -4,7 +4,7 @@ import { IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { LabelAndInput } from '../../Common';
import last from 'lodash/last';
import { useMemoizedFn } from 'ahooks';
import { isNumericColumnStyle, isNumericColumnType } from '@/utils';
import { isNumericColumnStyle, isNumericColumnType } from '@/lib';
import { ColumnLabelFormat } from '@/components/ui/charts';
export const AGGREGATE_OPTIONS: {

View File

@ -1,5 +1,5 @@
import { ColumnMetaData, IBusterMetricChartConfig } from '@/api/asset_interfaces';
import { formatLabel } from '@/utils';
import { formatLabel } from '@/lib';
import { ColumnTypeIcon } from '../SelectAxis/config';
export const createColumnFieldOptions = (

View File

@ -4,7 +4,7 @@ import { MetricViewChartContent } from './MetricViewChartContent';
import { MetricViewChartHeader } from './MetricViewChartHeader';
import { useMetricIndividual, useBusterMetricsIndividualContextSelector } from '@/context/Metrics';
import { useMemoizedFn } from 'ahooks';
import { inputHasText } from '@/utils/text';
import { inputHasText } from '@/lib/text';
import { MetricChartEvaluation } from './MetricChartEvaluation';
import { ChartType } from '@/components/ui/charts/interfaces/enum';
import { AnimatePresence, motion } from 'framer-motion';

View File

@ -1,5 +1,5 @@
import { ShareAssetType, VerificationStatus, BusterMetricListItem } from '@/api/asset_interfaces';
import { makeHumanReadble, formatDate } from '@/utils';
import { makeHumanReadble, formatDate } from '@/lib';
import React, { memo, useMemo, useRef, useState } from 'react';
import { StatusBadgeIndicator, getShareStatus } from '@/components/features/Lists';
import { BusterUserAvatar, Text } from '@/components/ui';

View File

@ -5,7 +5,7 @@ import { AppContent } from '@/components/ui/layout/AppContent';
import { useBusterTermsIndividualContextSelector, useBusterTermsIndividual } from '@/context/Terms';
import { Dropdown, Input } from 'antd';
import { useDebounceFn } from 'ahooks';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import { AppMaterialIcons, EditableTitle } from '@/components/ui';
import { useAntToken } from '@/styles/useAntToken';
import { AppCodeEditor } from '@/components/ui/inputs/AppCodeEditor';

View File

@ -2,7 +2,7 @@ import React from 'react';
import { useBusterTermsIndividualContextSelector, useBusterTermsIndividual } from '@/context/Terms';
import { BusterUserAvatar } from '@/components/ui';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import { Text } from '@/components/ui';
import { DatasetList } from './TermDatasetSelect';

View File

@ -3,7 +3,7 @@
import React, { useMemo, useState } from 'react';
import { AppContent } from '@/components/ui/layout/AppContent';
import { BusterUserAvatar } from '@/components/ui';
import { formatDate } from '@/utils';
import { formatDate } from '@/lib';
import {
ListEmptyStateWithButton,
BusterList,

View File

@ -2,7 +2,7 @@ import React, { useMemo, useRef, useState } from 'react';
import { Input } from 'antd';
import { createStyles } from 'antd-style';
import { useMemoizedFn } from 'ahooks';
import { inputHasText } from '@/utils';
import { inputHasText } from '@/lib';
import { AIWarning } from './AIWarning';
import { SubmitButton } from './SubmitButton';
import { useChatInputFlow } from './useChatInputFlow';
@ -67,7 +67,7 @@ export const ChatInput: React.FC<{}> = React.memo(({}) => {
variant="borderless"
onBlur={onBlurInput}
onFocus={onFocusInput}
className="inline-block w-full pb-2! pl-3.5! pr-9! pt-2! align-middle"
className="inline-block w-full pt-2! pr-9! pb-2! pl-3.5! align-middle"
placeholder="Ask a follow up..."
value={inputValue}
autoFocus={true}
@ -77,7 +77,7 @@ export const ChatInput: React.FC<{}> = React.memo(({}) => {
autoSize={autoSize}
/>
<div className="absolute bottom-2 right-2">
<div className="absolute right-2 bottom-2">
<SubmitButton
disableSendButton={disableSendButton}
loading={loading}

Some files were not shown because too many files have changed in this diff Show More