diff --git a/admin/core/components/admin-sidebar/root.tsx b/admin/core/components/admin-sidebar/root.tsx index 9ef6b92bd0..05dde0d8ab 100644 --- a/admin/core/components/admin-sidebar/root.tsx +++ b/admin/core/components/admin-sidebar/root.tsx @@ -3,7 +3,7 @@ import { FC, useEffect, useRef } from "react"; import { observer } from "mobx-react"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // components import { HelpSection, SidebarMenu, SidebarDropdown } from "@/components/admin-sidebar"; // hooks diff --git a/admin/package.json b/admin/package.json index e4026da02e..ff9bf6a67d 100644 --- a/admin/package.json +++ b/admin/package.json @@ -14,9 +14,10 @@ "dependencies": { "@headlessui/react": "^1.7.19", "@plane/constants": "*", - "@plane/helpers": "*", + "@plane/hooks": "*", "@plane/types": "*", "@plane/ui": "*", + "@plane/utils": "*", "@sentry/nextjs": "^8.32.0", "@tailwindcss/typography": "^0.5.9", "@types/lodash": "^4.17.0", @@ -26,7 +27,7 @@ "lucide-react": "^0.356.0", "mobx": "^6.12.0", "mobx-react": "^9.1.1", - "next": "^14.2.12", + "next": "^14.2.20", "next-themes": "^0.2.1", "postcss": "^8.4.38", "react": "^18.3.1", diff --git a/packages/editor/package.json b/packages/editor/package.json index 8471513c97..19c361629b 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -27,6 +27,7 @@ "dev": "tsup --watch", "check-types": "tsc --noEmit", "lint": "eslint src --ext .ts,.tsx", + "lint:errors": "eslint src --ext .ts,.tsx --quiet", "format": "prettier --write \"**/*.{ts,tsx,md}\"" }, "peerDependencies": { @@ -36,8 +37,8 @@ "dependencies": { "@floating-ui/react": "^0.26.4", "@hocuspocus/provider": "^2.13.5", - "@plane/helpers": "*", "@plane/ui": "*", + "@plane/utils": "*", "@tiptap/core": "^2.1.13", "@tiptap/extension-blockquote": "^2.1.13", "@tiptap/extension-character-count": "^2.6.5", diff --git a/packages/editor/src/core/extensions/callout/logo-selector.tsx b/packages/editor/src/core/extensions/callout/logo-selector.tsx index 4e9f966aff..4c78a2c047 100644 --- a/packages/editor/src/core/extensions/callout/logo-selector.tsx +++ b/packages/editor/src/core/extensions/callout/logo-selector.tsx @@ -1,5 +1,5 @@ // plane helpers -import { convertHexEmojiToDecimal } from "@plane/helpers"; +import { convertHexEmojiToDecimal } from "@plane/utils"; // plane ui import { EmojiIconPicker, EmojiIconPickerTypes, Logo, TEmojiLogoProps } from "@plane/ui"; // helpers diff --git a/packages/editor/src/core/extensions/callout/utils.ts b/packages/editor/src/core/extensions/callout/utils.ts index c450cbdd2d..6568a40e3e 100644 --- a/packages/editor/src/core/extensions/callout/utils.ts +++ b/packages/editor/src/core/extensions/callout/utils.ts @@ -1,5 +1,5 @@ // plane helpers -import { sanitizeHTML } from "@plane/helpers"; +import { sanitizeHTML } from "@plane/utils"; // plane ui import { TEmojiLogoProps } from "@plane/ui"; // types diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index e8de3524ce..8487dbb47d 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^8.6.0", "@typescript-eslint/parser": "^8.6.0", - "eslint": "8", + "eslint": "8.57.1", "eslint-config-next": "^14.1.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.12.4", diff --git a/packages/helpers/helpers/emoji.helper.ts b/packages/helpers/helpers/emoji.helper.ts deleted file mode 100644 index e0d5a1969c..0000000000 --- a/packages/helpers/helpers/emoji.helper.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const convertHexEmojiToDecimal = (emojiUnified: string): string => { - if (!emojiUnified) return ""; - - return emojiUnified - .toString() - .split("-") - .map((e) => parseInt(e, 16)) - .join("-"); -}; - -export const emojiCodeToUnicode = (emoji: string) => { - if (!emoji) return ""; - - // convert emoji code to unicode - const uniCodeEmoji = emoji - .toString() - .split("-") - .map((emoji) => parseInt(emoji, 10).toString(16)) - .join("-"); - - return uniCodeEmoji; -}; diff --git a/packages/helpers/helpers/index.ts b/packages/helpers/helpers/index.ts deleted file mode 100644 index e800e98fdc..0000000000 --- a/packages/helpers/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./emoji.helper" -export * from "./string.helper" \ No newline at end of file diff --git a/packages/helpers/index.ts b/packages/helpers/index.ts deleted file mode 100644 index f1216272dd..0000000000 --- a/packages/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./helpers"; -export * from "./hooks"; diff --git a/packages/hooks/.eslintignore b/packages/hooks/.eslintignore new file mode 100644 index 0000000000..6019047c3e --- /dev/null +++ b/packages/hooks/.eslintignore @@ -0,0 +1,3 @@ +build/* +dist/* +out/* \ No newline at end of file diff --git a/packages/hooks/.eslintrc.js b/packages/hooks/.eslintrc.js new file mode 100644 index 0000000000..558b8f76ed --- /dev/null +++ b/packages/hooks/.eslintrc.js @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@plane/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, +}; diff --git a/packages/hooks/.prettierignore b/packages/hooks/.prettierignore new file mode 100644 index 0000000000..d5be669c5e --- /dev/null +++ b/packages/hooks/.prettierignore @@ -0,0 +1,4 @@ +.turbo +out/ +dist/ +build/ \ No newline at end of file diff --git a/packages/hooks/.prettierrc b/packages/hooks/.prettierrc new file mode 100644 index 0000000000..87d988f1b2 --- /dev/null +++ b/packages/hooks/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "trailingComma": "es5" +} diff --git a/packages/hooks/package.json b/packages/hooks/package.json new file mode 100644 index 0000000000..4473a41321 --- /dev/null +++ b/packages/hooks/package.json @@ -0,0 +1,27 @@ +{ + "name": "@plane/hooks", + "version": "0.24.0", + "description": "React hooks that are shared across multiple apps internally", + "private": true, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist/**" + ], + "scripts": { + "build": "tsup ./src/index.ts --format esm,cjs --dts --external react --minify", + "lint": "eslint . --ext .ts,.tsx", + "lint:errors": "eslint . --ext .ts,.tsx --quiet" + }, + "dependencies": { + "react": "^18.3.1" + }, + "devDependencies": { + "@plane/eslint-config": "*", + "@types/node": "^22.5.4", + "@types/react": "^18.3.11", + "tsup": "^7.2.0", + "typescript": "^5.3.3" + } +} diff --git a/packages/helpers/hooks/index.ts b/packages/hooks/src/index.ts similarity index 100% rename from packages/helpers/hooks/index.ts rename to packages/hooks/src/index.ts diff --git a/packages/helpers/hooks/use-local-storage.tsx b/packages/hooks/src/use-local-storage.tsx similarity index 100% rename from packages/helpers/hooks/use-local-storage.tsx rename to packages/hooks/src/use-local-storage.tsx diff --git a/packages/helpers/hooks/use-outside-click-detector.tsx b/packages/hooks/src/use-outside-click-detector.tsx similarity index 100% rename from packages/helpers/hooks/use-outside-click-detector.tsx rename to packages/hooks/src/use-outside-click-detector.tsx diff --git a/packages/helpers/tsconfig.json b/packages/hooks/tsconfig.json similarity index 88% rename from packages/helpers/tsconfig.json rename to packages/hooks/tsconfig.json index f9715d3d8b..e8af9092ad 100644 --- a/packages/helpers/tsconfig.json +++ b/packages/hooks/tsconfig.json @@ -4,6 +4,6 @@ "jsx": "react", "lib": ["esnext", "dom"] }, - "include": ["."], + "include": ["./src"], "exclude": ["dist", "build", "node_modules"] } diff --git a/packages/ui/package.json b/packages/ui/package.json index 27189f606d..e4ebc0fe40 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -18,7 +18,8 @@ "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "postcss": "postcss styles/globals.css -o styles/output.css --watch", - "lint": "eslint src --ext .ts,.tsx" + "lint": "eslint src --ext .ts,.tsx", + "lint:errors": "eslint src --ext .ts,.tsx --quiet" }, "peerDependencies": { "react": "^18.3.1", @@ -31,7 +32,8 @@ "@blueprintjs/popover2": "^1.13.3", "@headlessui/react": "^1.7.3", "@popperjs/core": "^2.11.8", - "@plane/helpers": "*", + "@plane/hooks": "*", + "@plane/utils": "*", "clsx": "^2.0.0", "emoji-picker-react": "^4.5.16", "lodash": "^4.17.21", diff --git a/packages/ui/src/dropdown/multi-select.tsx b/packages/ui/src/dropdown/multi-select.tsx index 6b50183702..25f22c6be4 100644 --- a/packages/ui/src/dropdown/multi-select.tsx +++ b/packages/ui/src/dropdown/multi-select.tsx @@ -5,7 +5,7 @@ import { Combobox } from "@headlessui/react"; // popper-js import { usePopper } from "react-popper"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // components import { DropdownButton } from "./common"; import { DropdownOptions } from "./common/options"; diff --git a/packages/ui/src/dropdown/single-select.tsx b/packages/ui/src/dropdown/single-select.tsx index 1c3b05f5b6..123c9e6982 100644 --- a/packages/ui/src/dropdown/single-select.tsx +++ b/packages/ui/src/dropdown/single-select.tsx @@ -5,7 +5,7 @@ import { Combobox } from "@headlessui/react"; // popper-js import { usePopper } from "react-popper"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // components import { DropdownButton } from "./common"; import { DropdownOptions } from "./common/options"; diff --git a/packages/ui/src/dropdowns/context-menu/root.tsx b/packages/ui/src/dropdowns/context-menu/root.tsx index 03fe0cf7bc..f251696d21 100644 --- a/packages/ui/src/dropdowns/context-menu/root.tsx +++ b/packages/ui/src/dropdowns/context-menu/root.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useRef, useState } from "react"; import ReactDOM from "react-dom"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // components import { ContextMenuItem } from "./item"; // helpers diff --git a/packages/ui/src/dropdowns/custom-menu.tsx b/packages/ui/src/dropdowns/custom-menu.tsx index e74fa59490..39f01d1ed2 100644 --- a/packages/ui/src/dropdowns/custom-menu.tsx +++ b/packages/ui/src/dropdowns/custom-menu.tsx @@ -4,7 +4,7 @@ import { Menu } from "@headlessui/react"; import { usePopper } from "react-popper"; import { ChevronDown, MoreHorizontal } from "lucide-react"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // hooks import { useDropdownKeyDown } from "../hooks/use-dropdown-key-down"; // helpers diff --git a/packages/ui/src/dropdowns/custom-search-select.tsx b/packages/ui/src/dropdowns/custom-search-select.tsx index 7842f1531d..4302c12fdc 100644 --- a/packages/ui/src/dropdowns/custom-search-select.tsx +++ b/packages/ui/src/dropdowns/custom-search-select.tsx @@ -4,7 +4,7 @@ import { Combobox } from "@headlessui/react"; import { Check, ChevronDown, Info, Search } from "lucide-react"; import { createPortal } from "react-dom"; // plane helpers -import { useOutsideClickDetector } from "@plane/helpers"; +import { useOutsideClickDetector } from "@plane/hooks"; // hooks import { useDropdownKeyDown } from "../hooks/use-dropdown-key-down"; // helpers @@ -97,10 +97,11 @@ export const CustomSearchSelect = (props: ICustomSearchSelectProps) => {