diff --git a/.eslintrc.js b/.eslintrc.js index 24fdc91..cbe1099 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,47 +1,285 @@ const path = require('path'); + const prettierConfig = require('./prettier.config.js'); module.exports = { $schema: 'https://json.schemastore.org/eslintrc', - root: true, extends: [ 'next/core-web-vitals', 'prettier', 'plugin:tailwindcss/recommended', + 'plugin:perfectionist/recommended-natural-legacy', + ], + overrides: [ + { + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser', + }, ], - plugins: ['tailwindcss', 'unused-imports', 'prettier'], + plugins: ['tailwindcss', 'unused-imports', 'perfectionist', 'prettier'], + root: true, rules: { '@next/next/no-html-link-for-pages': 'off', 'prettier/prettier': ['warn', { ...prettierConfig }], - 'react/jsx-key': 'off', 'react/display-name': 'off', + 'react/jsx-key': 'off', 'tailwindcss/classnames-order': 'warn', - 'tailwindcss/no-custom-classname': 'error', + 'tailwindcss/no-custom-classname': 'off', 'unused-imports/no-unused-imports': 'warn', 'unused-imports/no-unused-vars': [ 'warn', { + args: 'none', + argsIgnorePattern: '^_', ignoreRestSiblings: true, vars: 'all', varsIgnorePattern: '^_', - args: 'none', - argsIgnorePattern: '^_', }, ], + // Perfectionist + ...{ + '@typescript-eslint/adjacent-overload-signatures': 'off', + + 'perfectionist/sort-array-includes': [ + 'warn', + { + groupKind: 'literals-first', + ignoreCase: false, + type: 'natural', + }, + ], + + 'perfectionist/sort-astro-attributes': [ + 'warn', + { ignoreCase: false, type: 'natural' }, + ], + 'perfectionist/sort-classes': [ + 'warn', + { + groups: [ + 'index-signature', + 'static-property', + 'private-property', + 'protected-property', + 'property', + 'constructor', + 'static-method', + 'private-method', + 'protected-method', + 'method', + ['get-method', 'set-method'], + 'static-block', + 'unknown', + ], + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-enums': [ + 'warn', + { + ignoreCase: false, + sortByValue: true, + type: 'natural', + }, + ], + 'perfectionist/sort-exports': [ + 'warn', + { ignoreCase: false, type: 'natural' }, + ], + 'perfectionist/sort-imports': [ + // 'off', + 'warn', + { + customGroups: { + type: { + next: 'next', + react: 'react', + }, + value: { + next: ['next'], + react: ['react', 'react-*'], + }, + }, + groups: [ + 'react', + ['type', 'internal-type'], + 'next', + ['builtin', 'external'], + 'internal', + ['parent-type', 'sibling-type', 'index-type'], + ['parent', 'sibling', 'index'], + 'side-effect', + 'style', + 'object', + 'unknown', + ], + ignoreCase: false, + internalPattern: ['@/**'], + type: 'natural', + }, + ], + 'perfectionist/sort-interfaces': [ + 'warn', + { + customGroups: { + key: ['key', 'keys'], + id: ['id', '_id'], + }, + groupKind: 'required-first', + groups: ['key', 'id', 'multiline', 'unknown'], + ignoreCase: false, + type: 'natural', + }, + ], + // breaking: ordering matters + 'perfectionist/sort-intersection-types': 'off', + 'perfectionist/sort-jsx-props': [ + 'warn', + { + customGroups: { + key: ['key', 'keys'], + id: ['id', 'name', 'testId', 'data-testid'], + accessibility: [ + 'title', + 'alt', + 'placeholder', + 'label', + 'description', + 'fallback', + ], + callback: ['on*', 'handle*'], + className: ['className', 'class', 'style'], + control: ['asChild', 'as'], + data: ['data-*', 'aria-*'], + ref: ['ref', 'innerRef'], + state: [ + 'value', + 'checked', + 'selected', + 'open', + 'defaultValue', + 'defaultChecked', + 'defaultOpen', + 'disabled', + 'required', + 'readOnly', + 'loading', + ], + variant: ['variant', 'size', 'orientation', 'color'], + }, + groups: [ + 'id', + 'key', + 'ref', + 'control', + 'variant', + 'className', + 'state', + 'callback', + 'accessibility', + 'data', + 'unknown', + 'shorthand', + ], + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-maps': [ + 'warn', + { ignoreCase: false, type: 'natural' }, + ], + 'perfectionist/sort-named-exports': [ + 'warn', + { groupKind: 'types-first', ignoreCase: false, type: 'natural' }, + ], + // 'perfectionist/sort-named-imports': ['off'], + 'perfectionist/sort-named-imports': [ + 'warn', + { groupKind: 'types-first', ignoreCase: false, type: 'natural' }, + ], + 'perfectionist/sort-object-types': [ + 'warn', + { + customGroups: { + key: ['key', 'keys'], + id: ['id', '_id'], + callback: ['on*', 'handle*'], + }, + groupKind: 'required-first', + groups: ['key', 'id', 'multiline', 'unknown', 'callback'], + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-objects': [ + 'warn', + { + customGroups: { + key: ['key', 'keys'], + id: ['id', '_id'], + callback: ['on*', 'handle*'], + }, + groups: ['key', 'id', 'unknown', 'callback'], + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-sets': [ + 'warn', + { + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-switch-case': [ + 'warn', + { + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-union-types': [ + 'warn', + { + groups: [ + 'conditional', + 'function', + 'import', + ['intersection', 'union'], + 'named', + 'operator', + 'object', + 'keyword', + 'literal', + 'tuple', + 'nullish', + 'unknown', + ], + ignoreCase: false, + type: 'natural', + }, + ], + 'perfectionist/sort-variable-declarations': [ + 'warn', + { + ignoreCase: false, + type: 'natural', + }, + ], + 'react/jsx-sort-props': 'off', + 'sort-imports': 'off', + 'sort-keys': 'off', + }, }, settings: { + next: { + rootDir: ['./'], + }, tailwindcss: { callees: ['cn', 'cva', 'withCn'], config: path.join(__dirname, './tailwind.config.js'), }, - next: { - rootDir: ['./'], - }, }, - overrides: [ - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser', - }, - ], }; diff --git a/package.json b/package.json index 6b83755..b2b83a0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbo", "build": "next build", "start": "next start", "lint": "next lint", @@ -16,8 +16,9 @@ "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.3", "@udecode/cn": "^39.0.0", - "@udecode/plate-common": "39.2.20", - "@udecode/plate-selection": "39.2.12", + "@udecode/plate-common": "^39.2.21", + "@udecode/plate-basic-elements": "^39.0.0", + "@udecode/plate-basic-marks": "^39.0.0", "class-variance-authority": "0.7.0", "clsx": "^2.1.1", "eslint-plugin-prettier": "^5.2.1", @@ -36,7 +37,6 @@ "tailwindcss-animate": "1.0.7" }, "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@types/node": "^22.8.6", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", @@ -45,12 +45,14 @@ "encoding": "^0.1.13", "eslint": "^8.56.0", "eslint-config-next": "15.0.2", + "eslint-plugin-perfectionist": "3.9.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.37.2", "eslint-plugin-tailwindcss": "^3.17.5", "eslint-plugin-unused-imports": "^4.1.3", "postcss": "^8.4.45", "prettier": "^3.3.3", + "prettier-plugin-packagejson": "^2.5.3", "tailwindcss": "^3.4.14", "tsx": "^4.19.1", "typescript": "5.6.3" @@ -67,4 +69,4 @@ ] } } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2573fdb..8bcd179 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,12 +17,15 @@ importers: '@udecode/cn': specifier: ^39.0.0 version: 39.0.0(@types/react@18.3.12)(class-variance-authority@0.7.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwind-merge@2.5.4) + '@udecode/plate-basic-elements': + specifier: ^39.0.0 + version: 39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-basic-marks': + specifier: ^39.0.0 + version: 39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) '@udecode/plate-common': - specifier: 39.2.20 - version: 39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) - '@udecode/plate-selection': - specifier: 39.2.12 - version: 39.2.12(@udecode/plate-common@39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + specifier: ^39.2.21 + version: 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) class-variance-authority: specifier: 0.7.0 version: 0.7.0 @@ -37,7 +40,7 @@ importers: version: 0.454.0(react@18.3.1) next: specifier: ^15.0.2 - version: 15.0.2(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -72,9 +75,6 @@ importers: specifier: 1.0.7 version: 1.0.7(tailwindcss@3.4.14) devDependencies: - '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.3.1 - version: 4.3.1(prettier@3.3.3) '@types/node': specifier: ^22.8.6 version: 22.8.6 @@ -102,6 +102,9 @@ importers: eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) + eslint-plugin-perfectionist: + specifier: 3.9.1 + version: 3.9.1(eslint@8.57.1)(typescript@5.6.3) eslint-plugin-react: specifier: ^7.37.2 version: 7.37.2(eslint@8.57.1) @@ -117,6 +120,9 @@ importers: prettier: specifier: ^3.3.3 version: 3.3.3 + prettier-plugin-packagejson: + specifier: ^2.5.3 + version: 2.5.3(prettier@3.3.3) tailwindcss: specifier: ^3.4.14 version: 3.4.14 @@ -133,85 +139,10 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/runtime@7.25.6': resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} - engines: {node: '>=6.9.0'} - '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} @@ -415,15 +346,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ianvs/prettier-plugin-sort-imports@4.3.1': - resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} - peerDependencies: - '@vue/compiler-sfc': 2.7.x || 3.x - prettier: 2 || 3 - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -942,8 +864,52 @@ packages: react-dom: '>=16.8.0' tailwind-merge: '>=2.2.0' - '@udecode/plate-common@39.2.20': - resolution: {integrity: sha512-i+cHPY5/+G+CLdijyMyEKSh9qiq7RKYGk/8tuBN/qzQT+53XWirzxLkTS6siBVgIktZwXRpK9Td/+qCca6tW5g==} + '@udecode/plate-basic-elements@39.0.0': + resolution: {integrity: sha512-5E0liG1LbvJ63J5ueXATVVDVe0duyHgsARG97PLx+0MfSe4byodwoqU8L5KZ4JmHp3QNsk1M5hzhY4AnAEHyhA==} + peerDependencies: + '@udecode/plate-common': '>=39.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-basic-marks@39.0.0': + resolution: {integrity: sha512-GtHFK1gwmhfnwl0Lf3xiRuNS832bNaelx5Sr/uzSVpH7Xo4p7Ssdxp+vc9LsiUrQcBQyuybvyYGbiY7i2o5DCA==} + peerDependencies: + '@udecode/plate-common': '>=39.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-block-quote@39.0.0': + resolution: {integrity: sha512-5TxkIQFvYxX6CEOM0dtBnM/SX70kqXFHlz6ncEYC9hJnaNTpI6jiUqBfx5S2schVpFgtaxhi/0x17oTsFHsFMQ==} + peerDependencies: + '@udecode/plate-common': '>=39.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-code-block@39.0.0': + resolution: {integrity: sha512-I4GxJJBaa9qv2um6sAqt/LgT5aV4Cm4f9Q9pVlFwy077ciML+ms4QitbixFrebXh5tJWEQT2csXUdbmVaHdKAA==} + peerDependencies: + '@udecode/plate-common': '>=39.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-common@39.2.21': + resolution: {integrity: sha512-K+Hm5GEeO8YJJP1kRWErCbxDkOUmssnIR3xulcLEhIdUhoEEaojmNa2tfJ1H9mvmgM2JJgy5ZWcBqQES/KgwWg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -952,8 +918,8 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.108.0' - '@udecode/plate-core@39.2.20': - resolution: {integrity: sha512-pjOclpsqzEVibsquMmLfWEMBkJ5o7v+T66yNOG52c2coxrfvLoUWv++d4MiigvGNaZnB8uYbhJwQwg7YhKJEoA==} + '@udecode/plate-core@39.2.21': + resolution: {integrity: sha512-/+KEW5M55xrTaqofcUFX3KZOAtRza9TQKQC7DNg867gHo0qFR8m8qKs5l83OAoWnzYkM4Lj+0Sirui2RCr40Wg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -962,10 +928,10 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.108.0' - '@udecode/plate-selection@39.2.12': - resolution: {integrity: sha512-qwp4PiKq1N1skjssfj/Tb/dgB5sBsrlDYZTcOFT1IQuokGyX66jftiykzKclPH54xXcNJ+7qWCJo4M6I7AFk5g==} + '@udecode/plate-heading@39.0.0': + resolution: {integrity: sha512-J7No90ttd/2sXbbRnHZ9EgNR//A91UZ57bb15quYE+rlGSyuk1eANzMX5vbmgWMIQ8O53vSqWC12clo9sVaVZA==} peerDependencies: - '@udecode/plate-common': '>=39.2.12' + '@udecode/plate-common': '>=39.0.0' react: '>=16.8.0' react-dom: '>=16.8.0' slate: '>=0.103.0' @@ -973,8 +939,8 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.108.0' - '@udecode/plate-utils@39.2.20': - resolution: {integrity: sha512-iFdxDaDr0sSI1tvnoskESTL6D+IYjLowMG8Voh0H2jAqI59W7WGSMBr7wqI+JbiXVJyw3YwLaO+dPxUVTv8KFw==} + '@udecode/plate-utils@39.2.21': + resolution: {integrity: sha512-EEjUAKdzCqso92wqrqetA0cqYObjSISvI/M3dOrZ4Aij4IaMj/f1WBP6nQoDdpjXXmLnVeWT6Px0Gbuma3EcpA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1043,10 +1009,6 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1170,10 +1132,6 @@ packages: caniuse-lite@1.0.30001676: resolution: {integrity: sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1196,16 +1154,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1226,12 +1178,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1291,13 +1237,25 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + direction@1.0.4: resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} hasBin: true @@ -1375,10 +1333,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1451,6 +1405,25 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-perfectionist@3.9.1: + resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + astro-eslint-parser: ^1.0.2 + eslint: '>=8.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.41.1 + vue-eslint-parser: '>=9.0.0' + peerDependenciesMeta: + astro-eslint-parser: + optional: true + svelte: + optional: true + svelte-eslint-parser: + optional: true + vue-eslint-parser: + optional: true + eslint-plugin-prettier@5.2.1: resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1595,14 +1568,14 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -1610,6 +1583,9 @@ packages: get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1626,10 +1602,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -1638,6 +1610,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -1650,10 +1626,6 @@ packages: has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1793,6 +1765,10 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -1886,11 +1862,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1904,11 +1875,6 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -1958,9 +1924,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.454.0: resolution: {integrity: sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==} peerDependencies: @@ -1999,6 +1962,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2120,6 +2086,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} @@ -2195,6 +2165,14 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-plugin-packagejson@2.5.3: + resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} @@ -2361,6 +2339,10 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + slate-history@0.110.3: resolution: {integrity: sha512-sgdff4Usdflmw5ZUbhDkxFwCBQ2qlDKMMkF93w66KdV48vHOgN2BmLrf+2H8SdX8PYIpP/cTB0w8qWC2GwhDVA==} peerDependencies: @@ -2381,6 +2363,13 @@ packages: slate@0.110.2: resolution: {integrity: sha512-4xGULnyMCiEQ0Ml7JAC1A6HVE6MNpPJU7Eq4cXh1LxlrR0dFXC3XC+rNfQtUJ7chHoPkws57x7DDiWiZAt+PBA==} + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2453,10 +2442,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2469,6 +2454,10 @@ packages: resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + tailwind-merge@2.5.4: resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} @@ -2502,17 +2491,10 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - ts-api-utils@1.4.0: resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} @@ -2641,9 +2623,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.6.0: resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} @@ -2677,127 +2656,10 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.0 - - '@babel/compat-data@7.25.4': {} - - '@babel/core@7.25.2': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - convert-source-map: 2.0.0 - debug: 4.3.7 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.25.6': - dependencies: - '@babel/types': 7.25.6 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.25.2': - dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.6': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 - - '@babel/parser@7.25.6': - dependencies: - '@babel/types': 7.25.6 - '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 - - '@babel/traverse@7.25.6': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - debug: 4.3.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.6': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 @@ -2934,18 +2796,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3)': - dependencies: - '@babel/core': 7.25.2 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - prettier: 3.3.3 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -3396,10 +3246,53 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@udecode/plate-common@39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + '@udecode/plate-basic-elements@39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + dependencies: + '@udecode/plate-block-quote': 39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-code-block': 39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-common': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-heading': 39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + slate: 0.110.2 + slate-history: 0.110.3(slate@0.110.2) + slate-hyperscript: 0.100.0(slate@0.110.2) + slate-react: 0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2) + + '@udecode/plate-basic-marks@39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + dependencies: + '@udecode/plate-common': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + slate: 0.110.2 + slate-history: 0.110.3(slate@0.110.2) + slate-hyperscript: 0.100.0(slate@0.110.2) + slate-react: 0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2) + + '@udecode/plate-block-quote@39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': dependencies: - '@udecode/plate-core': 39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) - '@udecode/plate-utils': 39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-common': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + slate: 0.110.2 + slate-history: 0.110.3(slate@0.110.2) + slate-hyperscript: 0.100.0(slate@0.110.2) + slate-react: 0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2) + + '@udecode/plate-code-block@39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + dependencies: + '@udecode/plate-common': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + slate: 0.110.2 + slate-history: 0.110.3(slate@0.110.2) + slate-hyperscript: 0.100.0(slate@0.110.2) + slate-react: 0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2) + + '@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + dependencies: + '@udecode/plate-core': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-utils': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@udecode/react-utils': 39.0.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@udecode/slate': 39.2.1(slate-history@0.110.3(slate@0.110.2))(slate@0.110.2) @@ -3418,7 +3311,7 @@ snapshots: - react-native - scheduler - '@udecode/plate-core@39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + '@udecode/plate-core@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': dependencies: '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@udecode/react-utils': 39.0.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -3449,10 +3342,9 @@ snapshots: - react-native - scheduler - '@udecode/plate-selection@39.2.12(@udecode/plate-common@39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + '@udecode/plate-heading@39.0.0(@udecode/plate-common@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': dependencies: - '@udecode/plate-common': 39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) - copy-to-clipboard: 3.3.3 + '@udecode/plate-common': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) slate: 0.110.2 @@ -3460,9 +3352,9 @@ snapshots: slate-hyperscript: 0.100.0(slate@0.110.2) slate-react: 0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2) - '@udecode/plate-utils@39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': + '@udecode/plate-utils@39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2)': dependencies: - '@udecode/plate-core': 39.2.20(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) + '@udecode/plate-core': 39.2.21(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.110.3(slate@0.110.2))(slate-hyperscript@0.100.0(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) '@udecode/react-utils': 39.0.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@udecode/slate': 39.2.1(slate-history@0.110.3(slate@0.110.2))(slate@0.110.2) '@udecode/slate-react': 39.2.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.110.3(slate@0.110.2))(slate-react@0.110.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.110.2))(slate@0.110.2) @@ -3546,10 +3438,6 @@ snapshots: ansi-regex@6.1.0: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -3698,12 +3586,6 @@ snapshots: caniuse-lite@1.0.30001676: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -3731,16 +3613,10 @@ snapshots: clsx@2.1.1: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -3761,12 +3637,6 @@ snapshots: concat-map@0.0.1: {} - convert-source-map@2.0.0: {} - - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -3821,11 +3691,19 @@ snapshots: dequal@2.0.3: {} + detect-indent@7.0.1: {} + detect-libc@2.0.3: optional: true + detect-newline@4.0.1: {} + didyoumean@1.2.2: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + direction@1.0.4: {} dlv@1.1.3: {} @@ -3982,8 +3860,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} eslint-config-next@15.0.2(eslint@8.57.1)(typescript@5.6.3): @@ -4096,6 +3972,17 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 + eslint-plugin-perfectionist@3.9.1(eslint@8.57.1)(typescript@5.6.3): + dependencies: + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/utils': 8.12.2(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + minimatch: 9.0.5 + natural-compare-lite: 1.4.0 + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: eslint: 8.57.1 @@ -4287,8 +4174,6 @@ snapshots: functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -4297,6 +4182,8 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-stdin@9.0.0: {} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -4307,6 +4194,8 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + git-hooks-list@3.1.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4333,8 +4222,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@11.12.0: {} - globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -4344,6 +4231,14 @@ snapshots: define-properties: 1.2.1 gopd: 1.0.1 + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 4.0.0 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 @@ -4354,8 +4249,6 @@ snapshots: has-bigints@1.0.2: {} - has-flag@3.0.0: {} - has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -4479,6 +4372,8 @@ snapshots: is-path-inside@3.0.3: {} + is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} is-regex@1.1.4: @@ -4558,8 +4453,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@2.5.2: {} - json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} @@ -4570,8 +4463,6 @@ snapshots: dependencies: minimist: 1.2.8 - json5@2.2.3: {} - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -4616,10 +4507,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - lucide-react@0.454.0(react@18.3.1): dependencies: react: 18.3.1 @@ -4653,6 +4540,8 @@ snapshots: nanoid@3.3.7: {} + natural-compare-lite@1.4.0: {} + natural-compare@1.4.0: {} next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -4660,7 +4549,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@15.0.2(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.0.2 '@swc/counter': 0.1.3 @@ -4670,7 +4559,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.6(@babel/core@7.25.2)(react@18.3.1) + styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 15.0.2 '@next/swc-darwin-x64': 15.0.2 @@ -4773,6 +4662,8 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-type@4.0.0: {} + picocolors@1.1.0: {} picocolors@1.1.1: {} @@ -4834,6 +4725,13 @@ snapshots: dependencies: fast-diff: 1.3.0 + prettier-plugin-packagejson@2.5.3(prettier@3.3.3): + dependencies: + sort-package-json: 2.10.1 + synckit: 0.9.2 + optionalDependencies: + prettier: 3.3.3 + prettier@3.3.3: {} prop-types@15.8.1: @@ -5032,6 +4930,8 @@ snapshots: is-arrayish: 0.3.2 optional: true + slash@4.0.0: {} + slate-history@0.110.3(slate@0.110.2): dependencies: is-plain-object: 5.0.0 @@ -5061,6 +4961,19 @@ snapshots: is-plain-object: 5.0.0 tiny-warning: 1.0.3 + sort-object-keys@1.1.3: {} + + sort-package-json@2.10.1: + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + semver: 7.6.3 + sort-object-keys: 1.1.3 + source-map-js@1.2.1: {} streamsearch@1.1.0: {} @@ -5134,12 +5047,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.25.2)(react@18.3.1): + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 - optionalDependencies: - '@babel/core': 7.25.2 sucrase@3.35.0: dependencies: @@ -5151,10 +5062,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -5166,6 +5073,11 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.7.0 + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + tailwind-merge@2.5.4: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.14): @@ -5215,14 +5127,10 @@ snapshots: tiny-warning@1.0.3: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - ts-api-utils@1.4.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -5382,8 +5290,6 @@ snapshots: wrappy@1.0.2: {} - yallist@3.1.1: {} - yaml@2.6.0: {} yocto-queue@0.1.0: {} diff --git a/prettier.config.js b/prettier.config.js index 15b6a51..47ab226 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,34 +1,30 @@ /** @type {import('prettier').Config} */ module.exports = { + // Set the line ending to `lf`. + // https://prettier.io/docs/en/options.html#end-of-line endOfLine: 'lf', + + // Do not add semicolons at the end of statements. + // Specify the parser plugins to use for import sorting. + importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'], + + // Use single quotes for string literals. + // Combine type-only imports with value imports. + importOrderTypeScriptVersion: '5.1.6', + + // Set the tab width to 2 spaces. + plugins: ['prettier-plugin-packagejson'], + + // Add trailing commas for object and array literals in ES5-compatible mode. + // https://prettier.io/docs/en/options.html#semicolons semi: true, + + // https://prettier.io/docs/en/options.html#quotes singleQuote: true, + + // https://prettier.io/docs/en/options.html#tab-width tabWidth: 2, + + // https://prettier.io/docs/en/options.html#trailing-commas trailingComma: 'es5', - importOrder: [ - '^(react/(.*)$)|^(react$)', - '^(next/(.*)$)|^(next$)', - '', - '', - '^types$', - '^@/types/(.*)$', - '^@/config/(.*)$', - '^@/lib/(.*)$', - '^@/hooks/(.*)$', - '^@/components/ui/(.*)$', - '^@/components/(.*)$', - '^@/styles/(.*)$', - '^@/app/(.*)$', - '', - '^[./]', - '', - '^[./]', - '^react', - '^next', - '^@/', - '', - ], - importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'], - importOrderTypeScriptVersion: '5.1.6', - plugins: ['@ianvs/prettier-plugin-sort-imports'], }; diff --git a/scripts/sync.mts b/scripts/sync.mts index a3f3e31..2a7f53f 100644 --- a/scripts/sync.mts +++ b/scripts/sync.mts @@ -100,9 +100,9 @@ async function main() { // Log results if (updatedPackages.length > 0) { - console.log('\nThe following packages were updated.'); + console.info('\nThe following packages were updated.'); updatedPackages.forEach(({ currentVersion, name, newVersion }) => { - console.log( + console.info( '\u001B[32m%s\u001B[0m', `${name}: ${currentVersion} -> ${newVersion}` ); diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a32ea72..d713c79 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,33 +1,33 @@ +import { Metadata, Viewport } from 'next'; + import { cn } from '@udecode/cn'; -import { siteConfig } from '@/config/site'; -import { fontSans } from '@/lib/fonts'; import { TooltipProvider } from '@/components/plate-ui/tooltip'; import { SiteHeader } from '@/components/site/site-header'; import { TailwindIndicator } from '@/components/site/tailwind-indicator'; import { ThemeProvider } from '@/components/site/theme-provider'; +import { siteConfig } from '@/config/site'; +import { fontSans } from '@/lib/fonts'; import '@/styles/globals.css'; -import { Metadata, Viewport } from 'next'; - export const metadata: Metadata = { - title: { - default: siteConfig.name, - template: `%s - ${siteConfig.name}`, - }, description: siteConfig.description, icons: { + apple: '/apple-touch-icon.png', icon: '/favicon.ico', shortcut: '/favicon-16x16.png', - apple: '/apple-touch-icon.png', + }, + title: { + default: siteConfig.name, + template: `%s - ${siteConfig.name}`, }, }; export const viewport: Viewport = { themeColor: [ - { media: '(prefers-color-scheme: light)', color: 'white' }, - { media: '(prefers-color-scheme: dark)', color: 'black' }, + { color: 'white', media: '(prefers-color-scheme: light)' }, + { color: 'black', media: '(prefers-color-scheme: dark)' }, ], }; @@ -43,16 +43,15 @@ export default function RootLayout({ children }: RootLayoutProps) {
diff --git a/src/app/page.tsx b/src/app/page.tsx index ddb2a1a..415c92e 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,8 +1,8 @@ import Link from 'next/link'; -import { siteConfig } from '@/config/site'; import { PlateEditor } from '@/components/plate-editor'; import { buttonVariants } from '@/components/plate-ui/button'; +import { siteConfig } from '@/config/site'; export default function IndexPage() { return ( @@ -12,32 +12,29 @@ export default function IndexPage() { Plate Template.

- Plugin system & primitive component library.{' '} -
- CLI for styled components. Customizable. Open Source. And Next.js 14 - Ready. + Minimal Editor ยท Next 15

Documentation GitHub
-
+
diff --git a/src/components/icons.tsx b/src/components/icons.tsx deleted file mode 100644 index 9d3f1ff..0000000 --- a/src/components/icons.tsx +++ /dev/null @@ -1,256 +0,0 @@ -import React from 'react'; -import { cva } from 'class-variance-authority'; -import { - AlignCenter, - AlignJustify, - AlignLeft, - AlignRight, - Baseline, - Bold, - Check, - ChevronDown, - ChevronRight, - ChevronsUpDown, - Code2, - Edit2, - ExternalLink, - Eye, - FileCode, - GripVertical, - Heading1, - Heading2, - Heading3, - Heading4, - Heading5, - Heading6, - Image, - Indent, - Italic, - Keyboard, - Link2, - Link2Off, - List, - ListOrdered, - LucideProps, - MessageSquare, - MessageSquarePlus, - Minus, - Moon, - MoreHorizontal, - Outdent, - PaintBucket, - Pilcrow, - Plus, - Quote, - RectangleHorizontal, - RectangleVertical, - RotateCcw, - Search, - Settings, - Smile, - Strikethrough, - Subscript, - SunMedium, - Superscript, - Table, - Text, - Trash, - Twitter, - Underline, - WrapText, - X, -} from 'lucide-react'; - -import type { LucideIcon } from 'lucide-react'; - -export type Icon = LucideIcon; - -const borderAll = (props: LucideProps) => ( - - - -); - -const borderBottom = (props: LucideProps) => ( - - - -); - -const borderLeft = (props: LucideProps) => ( - - - -); - -const borderNone = (props: LucideProps) => ( - - - -); - -const borderRight = (props: LucideProps) => ( - - - -); - -const borderTop = (props: LucideProps) => ( - - - -); - -export const Icons = { - add: Plus, - alignCenter: AlignCenter, - alignJustify: AlignJustify, - alignLeft: AlignLeft, - alignRight: AlignRight, - arrowDown: ChevronDown, - bg: PaintBucket, - blockquote: Quote, - bold: Bold, - borderAll, - borderBottom, - borderLeft, - borderNone, - borderRight, - borderTop, - check: Check, - chevronRight: ChevronRight, - chevronsUpDown: ChevronsUpDown, - clear: X, - close: X, - code: Code2, - codeblock: FileCode, - color: Baseline, - column: RectangleVertical, - comment: MessageSquare, - commentAdd: MessageSquarePlus, - delete: Trash, - dragHandle: GripVertical, - editing: Edit2, - emoji: Smile, - externalLink: ExternalLink, - h1: Heading1, - h2: Heading2, - h3: Heading3, - h4: Heading4, - h5: Heading5, - h6: Heading6, - image: Image, - indent: Indent, - italic: Italic, - kbd: Keyboard, - lineHeight: WrapText, - link: Link2, - minus: Minus, - more: MoreHorizontal, - ol: ListOrdered, - outdent: Outdent, - paragraph: Pilcrow, - refresh: RotateCcw, - row: RectangleHorizontal, - search: Search, - settings: Settings, - strikethrough: Strikethrough, - subscript: Subscript, - superscript: Superscript, - table: Table, - text: Text, - trash: Trash, - ul: List, - underline: Underline, - unlink: Link2Off, - viewing: Eye, - - // www - gitHub: (props: LucideProps) => ( - - - - ), - logo: (props: LucideProps) => ( - - - - ), - moon: Moon, - sun: SunMedium, - twitter: Twitter, -}; - -export const iconVariants = cva('', { - variants: { - variant: { - toolbar: 'size-5', - menuItem: 'mr-2 size-5', - }, - size: { - sm: 'mr-2 size-4', - md: 'mr-2 size-6', - }, - }, - defaultVariants: {}, -}); diff --git a/src/components/plate-editor.tsx b/src/components/plate-editor.tsx index 1e91237..d3d323b 100644 --- a/src/components/plate-editor.tsx +++ b/src/components/plate-editor.tsx @@ -1,25 +1,88 @@ 'use client'; -import { Plate, usePlateEditor } from '@udecode/plate-common/react'; +import { useRef } from 'react'; -import { Editor } from '@/components/plate-ui/editor'; +import { withProps } from '@udecode/cn'; +import { BasicElementsPlugin } from '@udecode/plate-basic-elements/react'; +import { + BasicMarksPlugin, + BoldPlugin, + ItalicPlugin, + StrikethroughPlugin, + UnderlinePlugin, +} from '@udecode/plate-basic-marks/react'; +import { + ParagraphPlugin, + Plate, + PlateElement, + PlateLeaf, + usePlateEditor, +} from '@udecode/plate-common/react'; + +import { Editor, EditorContainer } from '@/components/plate-ui/editor'; export function PlateEditor() { - const editor = usePlateEditor({ - id: 'plate-editor', - plugins: [], - value: [ - { - id: '1', - type: 'p', - children: [{ text: '' }], - }, - ], - }); + const containerRef = useRef(null); + + const editor = useCreateEditor(); return ( - + + + ); } + +const useCreateEditor = () => { + return usePlateEditor({ + override: { + // Default styles in globals.css + components: { + [BoldPlugin.key]: withProps(PlateLeaf, { as: 'strong' }), + [ItalicPlugin.key]: withProps(PlateLeaf, { as: 'em' }), + [ParagraphPlugin.key]: withProps(PlateElement, { as: 'p' }), + [StrikethroughPlugin.key]: withProps(PlateLeaf, { as: 's' }), + [UnderlinePlugin.key]: withProps(PlateLeaf, { as: 'u' }), + blockquote: withProps(PlateElement, { as: 'blockquote' }), + h1: withProps(PlateElement, { as: 'h1' }), + h2: withProps(PlateElement, { as: 'h2' }), + h3: withProps(PlateElement, { as: 'h3' }), + }, + }, + plugins: [BasicElementsPlugin, BasicMarksPlugin], + value: [ + { + children: [{ text: 'Basic Editor' }], + type: 'h1', + }, + { + children: [{ text: 'Heading 2' }], + type: 'h2', + }, + { + children: [{ text: 'Heading 3' }], + type: 'h3', + }, + { + children: [{ text: 'This is a blockquote element' }], + type: 'blockquote', + }, + { + children: [ + { text: 'Basic marks: ' }, + { bold: true, text: 'bold' }, + { text: ', ' }, + { italic: true, text: 'italic' }, + { text: ', ' }, + { text: 'underline', underline: true }, + { text: ', ' }, + { strikethrough: true, text: 'strikethrough' }, + { text: '.' }, + ], + type: ParagraphPlugin.key, + }, + ], + }); +}; diff --git a/src/components/plate-ui/button.tsx b/src/components/plate-ui/button.tsx index 1dfa60f..e92ca63 100644 --- a/src/components/plate-ui/button.tsx +++ b/src/components/plate-ui/button.tsx @@ -1,56 +1,58 @@ import * as React from 'react'; + +import type { VariantProps } from 'class-variance-authority'; + import { Slot } from '@radix-ui/react-slot'; import { cn, withRef } from '@udecode/cn'; -import { cva, VariantProps } from 'class-variance-authority'; +import { cva } from 'class-variance-authority'; export const buttonVariants = cva( - 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', { + defaultVariants: { + size: 'sm', + variant: 'default', + }, variants: { + isMenu: { + true: 'w-full cursor-pointer justify-start', + }, + size: { + icon: 'size-[28px] rounded-md px-1.5', + lg: 'h-10 rounded-md px-4', + md: 'h-8 px-3 text-sm', + none: '', + sm: 'h-[28px] rounded-md px-2.5', + xs: 'h-8 rounded-md px-3 text-xs', + }, variant: { default: 'bg-primary text-primary-foreground hover:bg-primary/90', destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + ghost: 'hover:bg-accent hover:text-accent-foreground', + inlineLink: 'text-base text-primary underline underline-offset-4', + link: 'text-primary underline-offset-4 hover:underline', outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', - ghost: 'hover:bg-accent hover:text-accent-foreground', - link: 'text-primary underline-offset-4 hover:underline', - inlineLink: 'text-base text-primary underline underline-offset-4', }, - size: { - default: 'h-10 px-4 py-2', - xs: 'h-8 rounded-md px-3', - sm: 'h-9 rounded-md px-3', - sms: 'size-9 rounded-md px-0', - lg: 'h-11 rounded-md px-8', - icon: 'size-10', - none: '', - }, - isMenu: { - true: 'h-auto w-full cursor-pointer justify-start', - }, - }, - defaultVariants: { - variant: 'default', - size: 'default', }, } ); export const Button = withRef< 'button', - VariantProps & { + { asChild?: boolean; - } ->(({ className, isMenu, variant, size, asChild = false, ...props }, ref) => { + } & VariantProps +>(({ asChild = false, className, isMenu, size, variant, ...props }, ref) => { const Comp = asChild ? Slot : 'button'; return ( ); diff --git a/src/components/plate-ui/editor.tsx b/src/components/plate-ui/editor.tsx index 826c737..069132a 100644 --- a/src/components/plate-ui/editor.tsx +++ b/src/components/plate-ui/editor.tsx @@ -1,86 +1,105 @@ +'use client'; + import React from 'react'; + +import type { PlateContentProps } from '@udecode/plate-common/react'; +import type { VariantProps } from 'class-variance-authority'; + import { cn } from '@udecode/cn'; -import { PlateContent, PlateContentProps } from '@udecode/plate-common/react'; +import { PlateContent } from '@udecode/plate-common/react'; import { cva } from 'class-variance-authority'; -import type { VariantProps } from 'class-variance-authority'; +const editorContainerVariants = cva( + 'relative flex cursor-text [&_.slate-selection-area]:border [&_.slate-selection-area]:border-brand/25 [&_.slate-selection-area]:bg-brand/15', + { + defaultVariants: { + variant: 'default', + }, + variants: { + variant: { + default: 'w-full', + demo: 'h-[650px] w-full overflow-y-auto', + }, + }, + } +); + +export const EditorContainer = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef<'div'> & + VariantProps +>(({ className, variant, ...props }, ref) => { + return ( +
+ ); +}); + +EditorContainer.displayName = 'EditorContainer'; const editorVariants = cva( cn( - 'relative overflow-x-auto whitespace-pre-wrap break-words', - 'min-h-[80px] w-full rounded-md bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none', - '[&_[data-slate-placeholder]]:text-muted-foreground [&_[data-slate-placeholder]]:!opacity-100', + 'group/editor', + 'relative w-full whitespace-pre-wrap break-words', + 'rounded-md ring-offset-background placeholder:text-muted-foreground/80 focus-visible:outline-none', + '[&_[data-slate-placeholder]]:text-muted-foreground/80 [&_[data-slate-placeholder]]:!opacity-100', '[&_[data-slate-placeholder]]:top-[auto_!important]', '[&_strong]:font-bold' ), { + defaultVariants: { + variant: 'default', + }, variants: { - variant: { - outline: 'border border-input', - ghost: '', - }, - focused: { - true: 'ring-2 ring-ring ring-offset-2', - }, disabled: { true: 'cursor-not-allowed opacity-50', }, - focusRing: { - true: 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', - false: '', + focused: { + true: 'ring-2 ring-ring ring-offset-2', }, - size: { - sm: 'text-sm', - md: 'text-base', + variant: { + ai: 'w-full px-0 text-sm', + aiChat: + 'max-h-[min(70vh,320px)] w-full max-w-[700px] overflow-y-auto px-3 py-2 text-sm', + default: + 'min-h-full w-full px-16 pb-72 pt-4 text-base sm:px-[max(64px,calc(50%-350px))]', + demo: 'min-h-full w-full px-16 pb-72 pt-4 text-base sm:px-[max(64px,calc(50%-350px))]', + fullWidth: 'min-h-full w-full px-16 pb-72 pt-4 text-base sm:px-24', }, }, - defaultVariants: { - variant: 'outline', - focusRing: true, - size: 'sm', - }, } ); export type EditorProps = PlateContentProps & VariantProps; -const Editor = React.forwardRef( - ( - { - className, - disabled, - focused, - focusRing, - readOnly, - size, - variant, - ...props - }, - ref - ) => { +export const Editor = React.forwardRef( + ({ className, disabled, focused, variant, ...props }, ref) => { return ( -
- -
+ ); } ); -Editor.displayName = 'Editor'; -export { Editor }; +Editor.displayName = 'Editor'; diff --git a/src/components/plate-ui/tooltip.tsx b/src/components/plate-ui/tooltip.tsx index b872ea0..ca6e82a 100644 --- a/src/components/plate-ui/tooltip.tsx +++ b/src/components/plate-ui/tooltip.tsx @@ -1,19 +1,27 @@ 'use client'; import React from 'react'; + import * as TooltipPrimitive from '@radix-ui/react-tooltip'; import { withCn, withProps } from '@udecode/cn'; -export const TooltipProvider = TooltipPrimitive.Provider; +export const TooltipProvider = withProps(TooltipPrimitive.Provider, { + delayDuration: 0, + disableHoverableContent: true, + skipDelayDuration: 0, +}); + export const Tooltip = TooltipPrimitive.Root; + export const TooltipTrigger = TooltipPrimitive.Trigger; + export const TooltipPortal = TooltipPrimitive.Portal; export const TooltipContent = withCn( withProps(TooltipPrimitive.Content, { sideOffset: 4, }), - 'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md' + 'z-50 overflow-hidden rounded-md bg-black px-3 py-1.5 text-sm font-semibold text-white shadow-md' ); export function withTooltip< @@ -21,8 +29,7 @@ export function withTooltip< >(Component: T) { return React.forwardRef< React.ElementRef, - React.ComponentPropsWithoutRef & { - tooltip?: React.ReactNode; + { tooltipContentProps?: Omit< React.ComponentPropsWithoutRef, 'children' @@ -31,9 +38,19 @@ export function withTooltip< React.ComponentPropsWithoutRef, 'children' >; - } + tooltip?: React.ReactNode; + } & React.ComponentPropsWithoutRef & + Omit >(function ExtendComponent( - { tooltip, tooltipContentProps, tooltipProps, ...props }, + { + delayDuration = 0, + disableHoverableContent = true, + skipDelayDuration = 0, + tooltip, + tooltipContentProps, + tooltipProps, + ...props + }, ref ) { const [mounted, setMounted] = React.useState(false); @@ -46,13 +63,21 @@ export function withTooltip< if (tooltip && mounted) { return ( - - {component} + + + {component} - - {tooltip} - - + + + {tooltip} + + + + ); } diff --git a/src/components/site/main-nav.tsx b/src/components/site/main-nav.tsx index e92c2f4..1ed29b0 100644 --- a/src/components/site/main-nav.tsx +++ b/src/components/site/main-nav.tsx @@ -1,10 +1,11 @@ import * as React from 'react'; -import Link from 'next/link'; + import { cn } from '@udecode/cn'; +import { MinusIcon } from 'lucide-react'; +import Link from 'next/link'; -import { NavItem } from '@/types/nav'; import { siteConfig } from '@/config/site'; -import { Icons } from '@/components/icons'; +import { NavItem } from '@/types/nav'; interface MainNavProps { items?: NavItem[]; @@ -13,8 +14,8 @@ interface MainNavProps { export function MainNav({ items }: MainNavProps) { return (
- - + + {siteConfig.name} {items?.length ? ( @@ -24,11 +25,11 @@ export function MainNav({ items }: MainNavProps) { item.href && ( {item.title} diff --git a/src/components/site/site-header.tsx b/src/components/site/site-header.tsx index 09629a9..c3d4e52 100644 --- a/src/components/site/site-header.tsx +++ b/src/components/site/site-header.tsx @@ -1,10 +1,11 @@ +import type { LucideProps } from 'lucide-react'; + import Link from 'next/link'; -import { siteConfig } from '@/config/site'; -import { Icons } from '@/components/icons'; import { buttonVariants } from '@/components/plate-ui/button'; import { MainNav } from '@/components/site/main-nav'; import { ThemeToggle } from '@/components/site/theme-toggle'; +import { siteConfig } from '@/config/site'; export function SiteHeader() { return ( @@ -15,8 +16,8 @@ export function SiteHeader() {