diff --git a/.gitignore b/.gitignore index 4c91ab0..76f1a8f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ .env app/node_modules +remix/node_modules +next/node_modules app-next/node_modules api/node_modules node_modules diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a8ff2b7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,716 @@ +{ + "name": "thingtime", + "version": "0.0.11", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "thingtime", + "version": "0.0.11", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "smarts": "2.0.0", + "typescript": "^4.9.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/polyfill/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/@babel/standalone": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.24.10.tgz", + "integrity": "sha512-nGC37EKfmelpyCXto1pw6SBkD5ZQRdMbL6WISi28xWit9dtiy9dChU1WgEfzturUTxrmOGkMDRrCydFMA7uOaQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==" + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-mergeable-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/smarts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/smarts/-/smarts-2.0.0.tgz", + "integrity": "sha512-E+d1Jx7KgmM26Z0vh85bN3RttS4qvrB0Me0unwPnlbP0PfWpvRhkMCSsGBObRqat16TfzRH+IW2rxIsphTreDQ==", + "dependencies": { + "@babel/core": "^7.14.8", + "@babel/generator": "^7.8.4", + "@babel/parser": "^7.22.5", + "@babel/polyfill": "^7.4.4", + "@babel/standalone": "^7.14.8", + "@babel/template": "^7.14.8", + "@babel/types": "^7.15.0", + "core-js": "^3.6.4", + "deepmerge": "^3.2.0", + "is-mergeable-object": "^1.1.1", + "prettier": "^2.3.2", + "uuid": "^3.4.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/package.json b/package.json index 78044ca..a4e1485 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "scripts": { "app": "npm run remix", "remix": "npm run dev --prefix remix", + "build-remix": "npm run build --prefix remix", "next": "npm run dev --prefix next", "api": "npm run dev --prefix api", - "build": "npm run build --prefix next", "postinstall": "pnpm i --prefix next ; pnpm i --prefix=api" }, "repository": { diff --git a/raycast/package.json b/raycast/package.json index 48ff3c2..39aa9ea 100644 --- a/raycast/package.json +++ b/raycast/package.json @@ -93,7 +93,6 @@ "title": "Commander", "description": "Open Thingtime Commander", "mode": "view", - "fallbackText": "test2", "keywords": [ "commander", "thingtime", @@ -107,7 +106,38 @@ "key": "name", "title": "Name of Command to run", "description": "The name of the command/function to run", - "defaultValue": "Menu" + "defaultValue": "MagicInput" + } + ] + }, + { + "name": "commanderMagicInput", + "title": "Magic Input", + "description": "Evaluates a Magic Input", + "mode": "no-view", + "keywords": [ + "commander", + "thingtime", + "ai" + ], + "arguments": [ + { + "placeholder": "Path", + "name": "path", + "type": "text", + "description": "The path to open the new finder window at", + "required": false + } + ], + "preferences": [ + { + "name": "name", + "required": false, + "type": "textfield", + "key": "name", + "title": "Name of Command to run", + "description": "The name of the command/function to run", + "defaultValue": "openNewFinderWindow" } ] }, @@ -116,7 +146,6 @@ "title": "Open New Finder Window", "description": "Open new finder window", "mode": "no-view", - "fallbackText": "test2", "keywords": [ "commander", "thingtime", @@ -148,7 +177,6 @@ "title": "Trim image", "description": "Will trim all whitespace from an image", "mode": "no-view", - "fallbackText": "test2", "keywords": [ "commander", "thingtime", @@ -171,7 +199,6 @@ "title": "mp4 to mp3", "description": "Converts an mp4 into an mp3 using ffmpeg at 320Kbps", "mode": "no-view", - "fallbackText": "test2", "keywords": [ "commander", "thingtime", diff --git a/remix/app/Providers/Chakra/space.tsx b/remix/app/Providers/Chakra/space.tsx index c74e26f..f9f4b34 100644 --- a/remix/app/Providers/Chakra/space.tsx +++ b/remix/app/Providers/Chakra/space.tsx @@ -5,6 +5,7 @@ const end = 9999; for (let i = start; i <= end; i++) { spaceObj[i] = `${i * 0.25}rem`; + // spaceObj[i] = `${i}px`; } spaceObj['container'] = '700px'; diff --git a/remix/app/components/Branding/Branding.tsx b/remix/app/components/Branding/Branding.tsx new file mode 100644 index 0000000..cb6d004 --- /dev/null +++ b/remix/app/components/Branding/Branding.tsx @@ -0,0 +1,12 @@ +import { Box, Center, Flex, Heading } from '@chakra-ui/react'; +import { Logo } from './Logo'; + +export const Branding = () => { + return ( + + Branding + Logo + + + ); +}; diff --git a/remix/app/components/Branding/Logo.tsx b/remix/app/components/Branding/Logo.tsx new file mode 100644 index 0000000..180b0e7 --- /dev/null +++ b/remix/app/components/Branding/Logo.tsx @@ -0,0 +1,108 @@ +import { Box, Center, Flex, Heading, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from '@chakra-ui/react'; +import React, { useMemo, useState } from 'react'; + +export const Logo = (props) => { + // a completely dynamic and interactive logo + // uses borders, border radius, and colour themes to create a simple timeless beautiful logo + + // const defaultThemeRaw = ['white', '#F20009', '#FD5F00', '#FFEB03', '#52E013', '#09A7EC', '#982E77', 'white']; + const defaultThemeRaw = ['#F20009', '#FD5F00', '#FFEB03', '#52E013', '#09A7EC', '#982E77', 'white']; + + const [reverseColours, setReverseColours] = useState(false); + + const defaultTheme = reverseColours ? defaultThemeRaw?.reverse() : defaultThemeRaw; + + const [theme, setTheme] = useState('blue'); + + const [squares, setSquares] = useState(9); + + const initialWidth = props?.width || 300; + + const [width, setWidth] = useState(initialWidth); + + // logo is a T/plus shape made of two intersecting squares + // you can toggle border sides on both squares to create different shapes + + const [borderWidth, setBorderWidth] = useState(18); + + const [borderRadius, setBorderRadius] = useState(0); + + const [padding, setPadding] = useState(0); + + const squaresArray = Array.from({ length: squares }, (_, index) => index); + + const [spacing, setSpacing] = useState(borderWidth); + + // log squaresArray + console.debug('tt.squaresArray', squaresArray); + + // basically the 5 squares that make up a plus but with the centre one missing + + const [divisions, setDivisions] = useState(3); + + const [boxWidth, setBoxWidth] = useState(100 / divisions + '%'); + + const uuid = useMemo(() => { + return Math.random().toString(36).substring(2) + Date.now().toString(36); + }, []); + + const boxStyles = { + padding: `${padding}px` + }; + + const InnerBox = (props: any = {}) => ; + + const Square = (props: any = {}) => ( + + + + ); + + return ( + <> + {/* these are the controls */} + {/* border radius use chakra slider */} + {props?.editable && ( + + + Logo Controls + + + Width {width}px + + + + + + 🟡 + + + Border Radius {borderRadius}px + + + + + + 🟡 + + + Padding {padding}px + + + + + + 🟡 + + + )} + + {squaresArray.map((_, index) => { + const odd = index % 2 === 0; + const even = !odd; + return ; + })} + + + ); +}; diff --git a/remix/app/components/Branding/LogoOld2.tsx b/remix/app/components/Branding/LogoOld2.tsx new file mode 100644 index 0000000..4f7c3d2 --- /dev/null +++ b/remix/app/components/Branding/LogoOld2.tsx @@ -0,0 +1,129 @@ +import { Box, Center, Flex, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from '@chakra-ui/react'; +import React, { useState } from 'react'; + +export const LogoOld2 = () => { + // a completely dynamic and interactive logo + // uses borders, border radius, and colour themes to create a simple timeless beautiful logo + + // const defaultThemeRaw = ['white', '#F20009', '#FD5F00', '#FFEB03', '#52E013', '#09A7EC', '#982E77', 'white']; + const defaultThemeRaw = ['#F20009', '#FD5F00', '#FFEB03', '#52E013', '#09A7EC', '#982E77', 'white']; + + const [reverseColours, setReverseColours] = useState(false); + + const defaultTheme = reverseColours ? defaultThemeRaw?.reverse() : defaultThemeRaw; + + const [theme, setTheme] = useState('blue'); + + const [squares, setSquares] = useState(8); + + const [width, setWidth] = useState(50); + + const [height, setHeight] = useState(50); + + // logo is a T/plus shape made of two intersecting squares + // you can toggle border sides on both squares to create different shapes + + const [borderWidth, setBorderWidth] = useState(18); + + const [borderRadius, setBorderRadius] = useState(12); + + const squaresArray = Array.from({ length: squares }, (_, index) => index); + + const [spacing, setSpacing] = useState(borderWidth); + + // log squaresArray + console.debug('tt.squaresArray', squaresArray); + + return ( + <> + {/* these are the controls */} + {/* border radius use chakra slider */} +
+ + + + + 🟡 + +
+
+ {/* border top left squares */} + {squaresArray.map((_, index) => { + const top = index * spacing; + const left = index * spacing; + const colour = defaultTheme[index]; + + const square = ( + + {/* another box which acts as a mask */} + + {/* */} + + ); + + return square; + })} + + {/* make squares for bottom right */} + + {squaresArray.map((_, index) => { + const bottom = index * spacing + height * 2; + const right = index * spacing + width * 2; + const colour = defaultTheme[index]; + + const square = ( + + {/* another box which acts as a mask */} + + {/* */} + + ); + + return square; + })} +
+ + ); +}; diff --git a/remix/app/components/Editor/Editor.tsx b/remix/app/components/Editor/Editor.tsx index a76b44d..d1c5316 100644 --- a/remix/app/components/Editor/Editor.tsx +++ b/remix/app/components/Editor/Editor.tsx @@ -8,8 +8,8 @@ export const Editor = (props) => { return ( <> - {/* only on client side render editor */} + {/* only on client side render editor */} Loading...}> diff --git a/remix/app/components/Nav/Nav.tsx b/remix/app/components/Nav/Nav.tsx index 226fe54..32d2f51 100644 --- a/remix/app/components/Nav/Nav.tsx +++ b/remix/app/components/Nav/Nav.tsx @@ -136,11 +136,11 @@ export const Nav = (props) => { )} {/* TODO - Add conditional only show if loggedIn */} -
+ {/*
-
+
*/}
diff --git a/remix/app/components/Thingtime/SettingsMenu.tsx b/remix/app/components/Thingtime/SettingsMenu.tsx index 6387c79..118fb64 100644 --- a/remix/app/components/Thingtime/SettingsMenu.tsx +++ b/remix/app/components/Thingtime/SettingsMenu.tsx @@ -1,146 +1,143 @@ -import React, { useState } from "react" -import ClickAwayListener from "react-click-away-listener" -import { Center, Flex, Text } from "@chakra-ui/react" +import React, { useState } from 'react'; +import ClickAwayListener from 'react-click-away-listener'; +import { Center, Flex, Text } from '@chakra-ui/react'; -import { Icon } from "../Icon/Icon" -import { useThingtime } from "./useThingtime" +import { Icon } from '../Icon/Icon'; +import { useThingtime } from './useThingtime'; export const SettingsMenu = (props) => { - const [show, setShow] = useState(false) - const hideRef = React.useRef(null) - const [opacity, setOpacity] = React.useState(props?.opacity === 0 ? 0 : 1) - const [pinStatus, setPinStatus] = React.useState(false) + const [show, setShow] = useState(false); + const hideRef = React.useRef(null); + const [opacity, setOpacity] = React.useState(props?.opacity === 0 ? 0 : 1); + const [pinStatus, setPinStatus] = React.useState(false); const stateRef = React.useRef({ - pinStatus, - }) + pinStatus + }); React.useEffect(() => { - stateRef.current.pinStatus = pinStatus - }, [pinStatus]) + stateRef.current.pinStatus = pinStatus; + }, [pinStatus]); - const { thingtime, events } = useThingtime() + const { thingtime, events } = useThingtime(); - const opacityRef = React.useRef(null) + const opacityRef = React.useRef(null); - const waitTime = 1555 + const waitTime = 1555; - const [uuid, setUuid] = React.useState(null) + const [uuid, setUuid] = React.useState(null); React.useEffect(() => { - setUuid(Math.random().toString(36).substring(7)) - }, []) + setUuid(Math.random().toString(36).substring(7)); + }, []); React.useEffect(() => { const subscription = events.subscribe((event) => { - if (event?.type === "settings-menu-hide" && event?.uuid !== uuid) { + if (event?.type === 'settings-menu-hide' && event?.uuid !== uuid) { if (!stateRef?.current?.pinStatus || event?.force) { - setShow(false) - setOpacity(0) + setShow(false); + setOpacity(0); } } - }) + }); return () => { - subscription?.unsubscribe?.() - } - }, [events, uuid]) + subscription?.unsubscribe?.(); + }; + }, [events, uuid]); React.useEffect(() => { - clearInterval(opacityRef?.current) + clearInterval(opacityRef?.current); if (props?.opacity) { - setOpacity(props?.opacity) + setOpacity(props?.opacity); } else { opacityRef.current = setInterval(() => { if (!stateRef?.current?.pinStatus) { - setOpacity(props?.opacity) - setShow(false) + setOpacity(props?.opacity); + setShow(false); } - }, waitTime) + }, waitTime); } - }, [props?.opacity]) + }, [props?.opacity]); React.useEffect(() => { if (show || props?.opacity) { - clearInterval(hideRef?.current) + clearInterval(hideRef?.current); events.next({ - type: "settings-menu-hide", - uuid, - }) + type: 'settings-menu-hide', + uuid + }); } else if (!show) { - setPinStatus(false) + setPinStatus(false); } - }, [show, props?.opacity, events, uuid]) + }, [show, props?.opacity, events, uuid]); const maybeHide = React.useCallback(() => { - clearInterval(hideRef?.current) + clearInterval(hideRef?.current); hideRef.current = setTimeout(() => { if (!stateRef?.current?.pinStatus) { - setShow(false) - setOpacity(0) + setShow(false); + setOpacity(0); } - }, waitTime) - }, []) + }, waitTime); + }, []); const showMenu = React.useCallback(() => { - clearInterval(hideRef?.current) - setShow(true) - }, []) + clearInterval(hideRef?.current); + setShow(true); + }, []); const hideMenu = React.useCallback(() => { - setShow(false) - }, []) + setShow(false); + }, []); const basePadding = React.useMemo(() => { - return 4 - }, []) + return 4; + }, []); const types = React.useMemo(() => { - const baseTypes = thingtime?.settings?.types?.javascript || {} - const baseTypeKeys = Object.keys(baseTypes) + const baseTypes = thingtime?.settings?.types?.javascript || {}; + const baseTypeKeys = Object.keys(baseTypes); - const customTypes = thingtime?.settings?.types?.custom || {} - const customTypeKeysRaw = Object.keys(customTypes) + const customTypes = thingtime?.settings?.types?.custom || {}; + const customTypeKeysRaw = Object.keys(customTypes); const customTypeKeys = customTypeKeysRaw?.filter((key) => { - return !baseTypeKeys?.includes?.(key) - }) + return !baseTypeKeys?.includes?.(key); + }); const types = [ ...(baseTypeKeys?.map?.((key) => { return { ...baseTypes?.[key], - key, - } + key + }; }) || []), ...(customTypeKeys?.map?.((key) => { return { ...customTypes?.[key], - key, - } - }) || []), - ] + key + }; + }) || []) + ]; - return types - }, [ - thingtime?.settings?.types?.javascript, - thingtime?.settings?.types?.custom, - ]) + return types; + }, [thingtime?.settings?.types?.javascript, thingtime?.settings?.types?.custom]); const onType = React.useCallback( (args) => { - props?.onType?.(args) + props?.onType?.(args); }, [props?.onType] - ) + ); const onDelete = React.useCallback( (type) => { - props?.onDelete?.() + props?.onDelete?.(); }, [props?.onDelete] - ) + ); - const childIconSize = 10 - const iconSize = props?.iconSize || 7 + const childIconSize = 10; + const iconSize = props?.iconSize || 7; return ( @@ -149,7 +146,7 @@ export const SettingsMenu = (props) => { // width="100%" paddingRight={36} opacity={opacity} - transition={props?.transition || "all 0.2s ease-in-out"} + transition={props?.transition || 'all 0.2s ease-in-out'} onMouseEnter={showMenu} onMouseLeave={maybeHide} > @@ -159,6 +156,8 @@ export const SettingsMenu = (props) => { cursor="pointer" // onClick={deleteValue} transition="all 0.2s ease-in-out" + // add title for hover context + title={`Options`} > @@ -169,7 +168,7 @@ export const SettingsMenu = (props) => { left={0} flexDirection="column" opacity={show ? 1 : 0} - pointerEvents={show ? "all" : "none"} + pointerEvents={show ? 'all' : 'none'} > { padding="5px" cursor="pointer" onClick={() => setPinStatus((prev) => !prev)} + title={`Pin Options`} > - + {show === true && } + {/* edit mode menu item */} + + + + Toggle Edit Mode + + + + + {!props?.readonly && ( @@ -200,17 +224,13 @@ export const SettingsMenu = (props) => { // paddingRight={basePadding} paddingLeft={basePadding} _hover={{ - background: "greys.light", + background: 'greys.light' }} cursor="pointer" // paddingX={basePadding * 1} paddingY={basePadding / 2} > - + Types @@ -228,12 +248,12 @@ export const SettingsMenu = (props) => { types.map((type, idx) => { const ret = ( div": { - background: "greys.light", - }, + '&>div': { + background: 'greys.light' + } }} cursor="pointer" onClick={() => onType({ type })} @@ -247,11 +267,7 @@ export const SettingsMenu = (props) => { paddingLeft={basePadding * 2} paddingY={basePadding / 2} > - + {type?.label || type?.key || type} @@ -259,18 +275,18 @@ export const SettingsMenu = (props) => { { - e?.preventDefault?.() - e?.stopPropagation?.() + e?.preventDefault?.(); + e?.stopPropagation?.(); // cancel bubble - e?.nativeEvent?.stopImmediatePropagation?.() + e?.nativeEvent?.stopImmediatePropagation?.(); onType({ type, - wrap: true, - }) + wrap: true + }); }} > @@ -278,8 +294,8 @@ export const SettingsMenu = (props) => { )} - ) - return ret + ); + return ret; })} {!props?.readonly && props?.onDelete && ( @@ -287,18 +303,14 @@ export const SettingsMenu = (props) => { alignItems="center" flexDirection="row" _hover={{ - background: "greys.light", + background: 'greys.light' }} cursor="pointer" onClick={onDelete} paddingX={basePadding * 1} paddingY={basePadding / 2} > - + Recycle @@ -308,5 +320,5 @@ export const SettingsMenu = (props) => {
- ) -} + ); +}; diff --git a/remix/app/routes/branding.tsx b/remix/app/routes/branding.tsx new file mode 100644 index 0000000..f18a63d --- /dev/null +++ b/remix/app/routes/branding.tsx @@ -0,0 +1,15 @@ +import { Box } from '@chakra-ui/react'; +import { Branding } from '~/components/Branding/Branding'; +import { TopSpacing } from '~/components/Layout/TopSpacing'; +import { Raw } from '~/components/MongoDB/Raw'; +import { RawResults } from '~/components/MongoDB/RawResults'; + +export default function branding() { + const template = ( + <> + + + ); + + return template; +} diff --git a/remix/package.json b/remix/package.json index caaf9b8..65d75f8 100644 --- a/remix/package.json +++ b/remix/package.json @@ -19,10 +19,10 @@ "@fortawesome/react-fontawesome": "^0.2.0", "@monaco-editor/react": "^4.6.0", "@remix-run/node": "^2.8.1", - "@remix-run/react": "^2.8.1", - "@remix-run/serve": "^2.8.1", + "@remix-run/react": "^2.10.3", + "@remix-run/serve": "^2.10.3", "@vercel/analytics": "^0.1.11", - "@vercel/remix": "^1.15.0", + "@vercel/remix": "^2.10.3", "axios": "^1.6.8", "bcrypt": "^5.1.1", "draft-js": "^0.11.7", @@ -48,7 +48,8 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@remix-run/dev": "^2.8.1", + "@emotion/styled": "^11.13.0", + "@remix-run/dev": "^2.10.3", "@remix-run/eslint-config": "^2.8.1", "@shopify/eslint-plugin": "^42.1.0", "@types/eslint": "^8.40.2", @@ -65,8 +66,9 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^2.0.0", + "framer-motion": "^11.3.12", "remix-flat-routes": "^0.6.4", - "typescript": "^4.9.3", + "typescript": "^5.5.4", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.3.2" }, @@ -74,6 +76,6 @@ "@types/react": "^17.0.2" }, "engines": { - "node": ">=14" + "node": "18.x" } } diff --git a/remix/vite.config.ts b/remix/vite.config.ts index b7ba49f..12a49ef 100644 --- a/remix/vite.config.ts +++ b/remix/vite.config.ts @@ -2,7 +2,7 @@ import { vitePlugin as remix } from '@remix-run/dev'; import { installGlobals } from '@remix-run/node'; import { defineConfig } from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; -import { flatRoutes } from 'remix-flat-routes' +import { flatRoutes } from 'remix-flat-routes'; installGlobals(); @@ -17,11 +17,12 @@ export default defineConfig({ }, plugins: [ remix({ - - routes: async defineRoutes => { - return flatRoutes('routes', defineRoutes) + routes: async (defineRoutes) => { + return flatRoutes('routes', defineRoutes); }, - + + serverModuleFormat: 'cjs', + // app path appDirectory: 'app' }), diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..e69de29