@aiquants/directory-tree 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/directory-tree.css +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -72
- package/dist/index.js.map +1 -1
- package/dist/src/DirectoryTree.d.ts +2 -2
- package/dist/src/DirectoryTree.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js","../src/TreeLine.tsx","../src/DirectoryTree.tsx","../src/useDirectoryTreeState.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * A component to render SVG lines for the directory tree.\n *\n * ディレクトリツリーの階層線を描画する SVG コンポーネント。\n */\n\nimport type { TreeLineProps } from \"./types\"\n\n/**\n * Renders SVG lines for a directory tree structure.\n *\n * ディレクトリツリー構造の SVG ラインを描画。\n *\n * @param props - コンポーネントの Props。\n * @returns TreeLine コンポーネント。\n */\nconst TreeLine = ({ items, itemHeight, width, segmentWidth, color = \"#a0aec0\", strokeWidth = 1, renderFromY = 0, renderHeight, renderStartIndex, renderEndIndex, lookaheadEndIndex }: TreeLineProps) => {\n const paths: string[] = []\n\n const effectiveRenderHeight = renderHeight ?? items.length * itemHeight\n const computedStartIndex = (() => {\n if (typeof renderStartIndex === \"number\" && Number.isFinite(renderStartIndex)) {\n return Math.max(0, Math.floor(renderStartIndex))\n }\n return Math.max(0, Math.floor(renderFromY / itemHeight))\n })()\n const defaultEndExclusive = Math.min(items.length, Math.ceil((renderFromY + effectiveRenderHeight) / itemHeight))\n const computedEndExclusive = (() => {\n if (typeof renderEndIndex === \"number\" && Number.isFinite(renderEndIndex)) {\n const endInclusive = Math.floor(renderEndIndex)\n return Math.max(Math.min(items.length, endInclusive + 1), computedStartIndex)\n }\n return Math.max(defaultEndExclusive, computedStartIndex)\n })()\n const lookaheadExclusive = (() => {\n if (typeof lookaheadEndIndex === \"number\" && Number.isFinite(lookaheadEndIndex)) {\n const endInclusive = Math.floor(lookaheadEndIndex)\n const candidate = Math.min(items.length, endInclusive + 1)\n return Math.max(candidate, computedEndExclusive)\n }\n return Math.max(defaultEndExclusive, computedEndExclusive)\n })()\n\n for (let itemIndex = computedStartIndex; itemIndex < computedEndExclusive; itemIndex++) {\n const item = items[itemIndex]\n const yBase = itemIndex * itemHeight\n const yCenter = yBase + itemHeight / 2\n\n // 祖先の線を描画\n for (let i = 0; i < item.indentLevel; i++) {\n const x = i * segmentWidth + segmentWidth / 2\n // この祖先ポイントから下に線を引くべきかどうかを確認\n // これは、同じまたはより深いレベルの後続アイテムが\n // この祖先の子であるかどうかに依存\n let drawVerticalLine = false\n for (let k = itemIndex; k < lookaheadExclusive; k++) {\n if (items[k].indentLevel > i && items[k].ancestorIsLast.length > i && !items[k].ancestorIsLast[i]) {\n drawVerticalLine = true\n break\n }\n if (items[k].indentLevel === i && k > itemIndex) {\n // 関連する兄弟要素を過ぎた\n break\n }\n }\n\n // 祖先の縦線にはアイコンスペースを設けない\n // drawVerticalLine は、その祖先ラインが下まで続く必要があるかどうかを判定\n // !item.ancestorIsLast[i] は、現在のアイテムの祖先 (i) が最後の子ではないことを確認 (つまり、線が続くべき)\n if (drawVerticalLine && item.ancestorIsLast.length > i && !item.ancestorIsLast[i]) {\n paths.push(`M ${x},${yBase} L ${x},${yBase + itemHeight}`)\n }\n }\n\n // 現在のアイテムの接続線を描画\n const connectorXBase = item.indentLevel * segmentWidth\n const connectorX = connectorXBase + segmentWidth / 2\n\n // L 字または T 字の垂直部分\n if (item.isDirectory) {\n const iconSpace = segmentWidth / 1.5 // アイコンスペースを調整\n paths.push(`M ${connectorX},${yBase} L ${connectorX},${yCenter - iconSpace}`) // アイコンスペースの上端までの線、上側のスペースを広げる\n } else {\n paths.push(`M ${connectorX},${yBase} L ${connectorX},${yCenter}`) // ファイルの場合は完全な線\n }\n\n // L 字または T 字の水平部分\n // ディレクトリ、または最後の子であるファイルの場合に描画\n if (item.isDirectory) {\n // ディレクトリの場合は、展開アイコンのために線に間を空ける\n // 右線は不要なので、左側の短い線のみ描画、もしくは何も描画しない\n // 現状では右線だけでなく、水平線全体が不要という解釈で何もしない\n } else if (item.isLastChild) {\n // ディレクトリではなく、最後の子であるファイルの場合\n paths.push(`M ${connectorX},${yCenter} L ${connectorXBase + segmentWidth},${yCenter}`)\n }\n\n // 兄弟の中で最後の子でない場合、垂直線を下に伸ばす\n if (!item.isLastChild) {\n if (item.isDirectory) {\n const iconSpace = segmentWidth / 1.5 // アイコンスペースを調整\n paths.push(`M ${connectorX},${yCenter + iconSpace} L ${connectorX},${yBase + itemHeight}`) // 下側のスペースを広げる\n } else {\n paths.push(`M ${connectorX},${yCenter} L ${connectorX},${yBase + itemHeight}`)\n }\n }\n }\n\n const svgHeight = items.length * itemHeight\n\n return (\n <svg\n width={width}\n height={renderHeight ?? svgHeight}\n viewBox={`0 ${renderFromY} ${width} ${renderHeight ?? svgHeight}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"pointer-events-none absolute top-0 left-0 z-0 opacity-75\" // コンテンツの背面に配置し、透明度を追加\n >\n <title>Tree Lines</title>\n {paths.map((d, index) => (\n <path key={`path-${items[computedStartIndex + index]?.id || index}-${computedStartIndex + index}`} d={d} stroke={color} strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ))}\n </svg>\n )\n}\n\nexport { TreeLine }\n","/**\n * @module DirectoryTree\n * @description A component to display a directory tree structure.\n * ディレクトリツリー構造を表示するためのコンポーネント。\n */\nimport { type ScrollBarTapCircleOptions, type ScrollPaneInertiaOptions, VirtualScroll, type VirtualScrollHandle } from \"@aiquants/virtualscroll\"\nimport { ChevronDownIcon, ChevronRightIcon, DocumentTextIcon, FolderIcon } from \"@heroicons/react/24/solid\"\nimport { FileIcon } from \"@phosphor-icons/react\"\nimport type { CSSProperties, MouseEvent, ReactElement, ReactNode, Ref } from \"react\"\nimport { Fragment, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { twMerge } from 'tailwind-merge'\nimport { TreeLine } from \"./TreeLine.tsx\"\nimport type {\n DirectoryEntry,\n DirectoryEntryItemProps,\n DirectoryTreeProps,\n DirectoryTreeVirtualScrollOptions,\n TreeLineItemInfo\n} from \"./types.ts\"\n\n/**\n * TailwindCSS v4 class names for DirectoryTree component\n * DirectoryTreeコンポーネント用の TailwindCSS v4 クラス名\n */\nconst directoryTreeClasses = {\n container: 'directory-tree-container relative h-full transition-opacity duration-300 overflow-y-hidden pb-[5px]',\n containerPending: 'opacity-70',\n\n entry: 'flex items-center cursor-pointer relative select-none',\n\n // ホバー時のスタイル(ライト/ダークモード対応)\n entryHover: twMerge(\n 'hover:bg-gray-400/15',\n 'dark:hover:bg-gray-200/10'\n ),\n\n // 選択時のスタイル(ライト/ダークモード対応)\n entrySelected: twMerge(\n 'bg-blue-400/10',\n 'dark:bg-blue-400/15'\n ),\n\n // アイテム選択時のスタイル(ライト/ダークモード対応)\n entryItemSelected: twMerge(\n 'bg-blue-400/20 shadow-[0_0_0_1px_rgba(59,130,246,0.3)]',\n 'dark:bg-blue-400/25 dark:shadow-[0_0_0_1px_rgba(96,165,250,0.4)]'\n ),\n\n // アイコンのスタイル\n expandIcon: twMerge(\n 'w-5 h-5 flex-shrink-0 flex items-center justify-center',\n 'text-gray-500',\n 'dark:text-gray-400'\n ),\n\n expandIconSelected: twMerge(\n 'text-blue-700',\n 'dark:text-blue-400'\n ),\n\n typeIcon: twMerge(\n 'w-5 h-5 flex-shrink-0 flex items-center justify-center',\n 'text-gray-500',\n 'dark:text-gray-400'\n ),\n\n typeIconSelected: twMerge(\n 'text-blue-700',\n 'dark:text-blue-400'\n ),\n\n // テキストのスタイル\n name: twMerge(\n 'overflow-hidden text-ellipsis whitespace-nowrap ml-1',\n 'text-gray-700',\n 'dark:text-gray-200'\n ),\n\n nameDirectory: 'font-bold',\n\n nameSelected: twMerge(\n 'text-blue-800 font-medium',\n 'dark:text-blue-300'\n ),\n}\n\n/**\n * カスタムスクロールバー非表示スタイル\n * Custom styles to hide scrollbar\n */\nconst scrollbarHideStyle: CSSProperties = {\n msOverflowStyle: 'none', /* IE and Edge */\n scrollbarWidth: 'none', /* Firefox */\n}\n\n/**\n * Webkit スクロールバー非表示のスタイルを動的に適用\n * Apply webkit scrollbar hiding styles dynamically\n */\nconst applyWebkitScrollbarHide = () => {\n // 既存のスタイルタグがあるかチェック\n let styleElement = document.getElementById('directory-tree-webkit-scrollbar-hide')\n\n if (!styleElement) {\n styleElement = document.createElement('style')\n styleElement.id = 'directory-tree-webkit-scrollbar-hide'\n styleElement.textContent = '.directory-tree-container::-webkit-scrollbar { display: none; }'\n document.head.appendChild(styleElement)\n }\n}\n\n/**\n * Get combined class names for entry element\n * エントリー要素の結合されたクラス名を取得\n */\nconst getEntryClasses = (\n isHovered: boolean = false,\n isSelected: boolean = false,\n isItemSelected: boolean = false\n): string => {\n return twMerge(\n directoryTreeClasses.entry,\n isHovered && directoryTreeClasses.entryHover,\n isSelected && directoryTreeClasses.entrySelected,\n isItemSelected && directoryTreeClasses.entryItemSelected\n )\n}\n\n/**\n * Get combined class names for expand icon\n * 展開アイコンの結合されたクラス名を取得\n */\nconst getExpandIconClasses = (isSelected: boolean = false): string => {\n return twMerge(\n directoryTreeClasses.expandIcon,\n isSelected && directoryTreeClasses.expandIconSelected\n )\n}\n\n/**\n * Get combined class names for type icon\n * タイプアイコンの結合されたクラス名を取得\n */\nconst getTypeIconClasses = (isSelected: boolean = false): string => {\n return twMerge(\n directoryTreeClasses.typeIcon,\n isSelected && directoryTreeClasses.typeIconSelected\n )\n}\n\n/**\n * Get combined class names for name text\n * 名前テキストの結合されたクラス名を取得\n */\nconst getNameClasses = (\n isDirectory: boolean = false,\n isSelected: boolean = false\n): string => {\n return twMerge(\n directoryTreeClasses.name,\n isDirectory && directoryTreeClasses.nameDirectory,\n isSelected && directoryTreeClasses.nameSelected\n )\n}\n\ntype DirectoryTreeVirtualScrollComponentProps<T> = {\n itemCount: number\n getItem: (index: number) => T\n getItemHeight: (index: number) => number\n viewportSize: number\n overscanCount?: number\n className?: string\n onScroll?: (scrollPosition: number, totalHeight: number) => void\n onRangeChange?: (\n renderingStartIndex: number,\n renderingEndIndex: number,\n visibleStartIndex: number,\n visibleEndIndex: number,\n scrollPosition: number,\n totalHeight: number\n ) => void\n background?: ReactNode\n children: (item: T, index: number) => ReactNode\n initialScrollIndex?: number\n initialScrollOffset?: number\n tapScrollCircleOptions?: ScrollBarTapCircleOptions\n scrollBarWidth?: number\n enableThumbDrag?: boolean\n enableTrackClick?: boolean\n enableArrowButtons?: boolean\n enablePointerDrag?: boolean\n inertiaOptions?: ScrollPaneInertiaOptions\n ref?: Ref<VirtualScrollHandle>\n}\n\nconst VirtualScrollExtended = VirtualScroll as unknown as <T>(props: DirectoryTreeVirtualScrollComponentProps<T>) => ReactElement\n\n/**\n * @function getFileExtension\n * @description Extracts the extension from a filename.\n * ファイル名から拡張子を抽出する。\n * @param {string} filename - The filename. ファイル名。\n * @returns {string} The file extension in lowercase. 小文字のファイル拡張子。\n */\nconst getFileExtension = (filename: string): string => {\n return filename.slice(((filename.lastIndexOf(\".\") - 1) >>> 0) + 2).toLowerCase()\n}\n\n/**\n * @component DirectoryEntryItem\n * @description Renders a single entry (file or directory) in the directory tree. Memoized for performance.\n * ディレクトリツリー内の単一エントリ (ファイルまたはディレクトリ) をレンダリングする。パフォーマンスのためにメモ化されている。\n * @param {DirectoryEntryItemProps} props - The props for the component.\n * @returns {JSX.Element} The DirectoryEntryItem component.\n */\nconst DirectoryEntryItem = memo<DirectoryEntryItemProps>(\n ({\n entry,\n indentLevel,\n isDirOpen,\n onFileSelect,\n toggleDirectory,\n onToggleDirectoryRecursive,\n selectedPath,\n parentIsLast,\n renderChildren = true,\n selectionMode = \"none\",\n selectedItems,\n onSelectionChange\n }) => {\n const clickTimer = useRef<number | null>(null)\n const [childrenToRender, setChildrenToRender] = useState<DirectoryEntry[] | null>(null)\n\n useEffect(() => {\n // コンポーネントがアンマウントされる際にタイマーをクリアする\n return () => {\n if (clickTimer.current) {\n window.clearTimeout(clickTimer.current)\n }\n }\n }, [])\n\n const isDirectory = entry.children !== undefined\n const isExpanded = isDirectory && isDirOpen(entry.absolutePath, entry.relativePath)\n const isSelected = entry.absolutePath === selectedPath\n const isItemSelected = !isDirectory && (selectedItems?.has(entry.absolutePath))\n\n useEffect(() => {\n if (isExpanded && entry.children) {\n Promise.resolve().then(() => {\n setChildrenToRender(entry.children ?? [])\n })\n } else {\n setChildrenToRender(null)\n }\n }, [isExpanded, entry.children])\n\n const handleInteraction = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n // 選択機能が有効で、かつファイルの場合のみ選択状態を変更\n if (selectionMode !== \"none\" && !isDirectory && onSelectionChange) {\n onSelectionChange(entry.absolutePath, !isItemSelected)\n }\n\n if (isDirectory) {\n // ディレクトリに対するクリック操作を処理する\n if (clickTimer.current) {\n // ダブルクリックを検出した場合、タイマーをクリアしてコールバックを実行する\n window.clearTimeout(clickTimer.current)\n clickTimer.current = null\n onToggleDirectoryRecursive(entry)\n } else {\n // シングルクリックの場合、タイマーを設定してダブルクリックの可能性を待つ\n clickTimer.current = window.setTimeout(() => {\n toggleDirectory(entry.absolutePath, entry.relativePath)\n clickTimer.current = null\n }, 500) // 500ms をダブルクリックのしきい値とする\n }\n } else {\n // ファイルの場合は、ファイル選択イベントを発生させる\n onFileSelect(entry.absolutePath, entry.relativePath)\n }\n },\n [isDirectory, entry, onToggleDirectoryRecursive, toggleDirectory, onFileSelect, selectionMode, onSelectionChange, isItemSelected],\n )\n\n // ホバー状態管理\n const [isHovered, setIsHovered] = useState(false)\n\n // Tailwindクラス名を動的に生成\n const entryClasses = getEntryClasses(isHovered, isSelected, isItemSelected)\n const expandIconClasses = getExpandIconClasses(isSelected || isItemSelected)\n const typeIconClasses = getTypeIconClasses(isSelected || isItemSelected)\n const nameClasses = getNameClasses(isDirectory, isSelected || isItemSelected)\n\n return (\n <Fragment key={entry.absolutePath}>\n <div\n className={entryClasses}\n style={{\n paddingLeft: `${indentLevel * INDENT_SIZE}px`,\n height: `${ITEM_HEIGHT}px`,\n }}\n onClick={handleInteraction}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleInteraction(e as unknown as MouseEvent<HTMLDivElement>)\n }\n }}\n tabIndex={0}\n role=\"treeitem\"\n aria-expanded={isDirectory ? isExpanded : undefined}\n aria-label={`${entry.name} (${isDirectory ? \"directory\" : \"file\"})`}>\n <span className={expandIconClasses}>{isDirectory ? isExpanded ? <ChevronDownIcon className=\"h-4 w-4\" /> : <ChevronRightIcon className=\"h-4 w-4\" /> : <span className=\"w-4\" />}</span>\n <span className={typeIconClasses}>\n {isDirectory ? (\n <FolderIcon className=\"h-4 w-4\" />\n ) : (\n (() => {\n const extension = getFileExtension(entry.name)\n switch (extension) {\n case \"md\":\n return <DocumentTextIcon className=\"h-4 w-4\" />\n default:\n return <FileIcon className=\"h-4 w-4\" />\n }\n })()\n )}\n </span>\n <span className={nameClasses}>{entry.name}</span>\n </div>\n {isExpanded && childrenToRender && renderChildren && (\n <fieldset>\n {childrenToRender.map((child, index) => (\n <DirectoryEntryItem\n key={child.absolutePath}\n entry={child}\n indentLevel={indentLevel + 1}\n isDirOpen={isDirOpen}\n onFileSelect={onFileSelect}\n toggleDirectory={toggleDirectory}\n onToggleDirectoryRecursive={onToggleDirectoryRecursive}\n selectedPath={selectedPath}\n parentIsLast={[...parentIsLast, index === (childrenToRender || []).length - 1]}\n selectionMode={selectionMode}\n selectedItems={selectedItems}\n onSelectionChange={onSelectionChange}\n />\n ))}\n </fieldset>\n )}\n </Fragment>\n )\n },\n (prevProps, nextProps) => {\n // entry オブジェクトの主要なプロパティを比較する\n if (\n prevProps.entry.absolutePath !== nextProps.entry.absolutePath ||\n prevProps.entry.relativePath !== nextProps.entry.relativePath ||\n prevProps.entry.name !== nextProps.entry.name ||\n prevProps.entry.type !== nextProps.entry.type ||\n (prevProps.entry.children === undefined) !== (nextProps.entry.children === undefined)\n ) {\n return false // entry の基本情報が変更されていれば再レンダリングする\n }\n\n // ディレクトリの展開状態を比較する\n const prevIsDirectory = prevProps.entry.children !== undefined\n const nextIsDirectory = nextProps.entry.children !== undefined\n const prevIsExpanded = prevIsDirectory && prevProps.isDirOpen(prevProps.entry.absolutePath, prevProps.entry.relativePath)\n const nextIsExpanded = nextIsDirectory && nextProps.isDirOpen(nextProps.entry.absolutePath, nextProps.entry.relativePath)\n\n // その他の props を比較する\n if (\n prevProps.indentLevel !== nextProps.indentLevel ||\n prevIsExpanded !== nextIsExpanded ||\n prevProps.selectedPath !== nextProps.selectedPath ||\n prevProps.onFileSelect !== nextProps.onFileSelect || // onFileSelect はメモ化されていることを期待\n prevProps.toggleDirectory !== nextProps.toggleDirectory || // toggleDirectory はメモ化されていることを期待\n prevProps.onToggleDirectoryRecursive !== nextProps.onToggleDirectoryRecursive ||\n prevProps.selectionMode !== nextProps.selectionMode ||\n prevProps.selectedItems !== nextProps.selectedItems ||\n prevProps.onSelectionChange !== nextProps.onSelectionChange\n ) {\n return false // これらの props が変更されていれば再レンダリングする\n }\n\n // 親が最後の子であるかの情報を格納した配列を比較する\n if (prevProps.parentIsLast.length !== nextProps.parentIsLast.length) {\n return false\n }\n for (let i = 0; i < prevProps.parentIsLast.length; i++) {\n if (prevProps.parentIsLast[i] !== nextProps.parentIsLast[i]) {\n return false // 配列の要素が一つでも異なれば再レンダリングする\n }\n }\n\n return true // すべての比較条件で変更がなければ再レンダリングをスキップする\n },\n)\nDirectoryEntryItem.displayName = \"DirectoryEntryItem\"\n\n// TreeLine コンポーネントが使用する props の型は TreeLine.tsx からインポートされる\n\nconst ITEM_HEIGHT = 20 // 各アイテムの高さ (px)\nconst INDENT_SIZE = 16 // 1階層あたりのインデント幅 (px)\n\n/**\n * @function getAllDescendantPaths\n * @description Recursively gets all descendant directory paths for a given entry.\n * 指定されたエントリのすべての子孫ディレクトリパスを再帰的に取得する。\n * @param {DirectoryEntry} entry - The directory entry to start from. 開始点となるディレクトリのエントリ。\n * @returns {string[]} An array of absolute paths of all descendant directories. すべての子孫ディレクトリの絶対パスの配列。\n */\nconst getAllDescendantPaths = (entry: DirectoryEntry): string[] => {\n const paths: string[] = []\n if (entry.children) {\n for (const child of entry.children) {\n if (child.type === \"directory\") {\n paths.push(child.absolutePath)\n paths.push(...getAllDescendantPaths(child))\n }\n }\n }\n return paths\n}\n\nconst getFlattenEntries = (entries: DirectoryEntry[], isExpanded: (absolutePath: string, relativePath: string) => boolean, parentIsLast: boolean[] = [], indentLevel = 0): { entry: DirectoryEntry; indentLevel: number; parentIsLast: boolean[] }[] => {\n return entries.flatMap((entry, index) => {\n const isLastChild = index === entries.length - 1\n const currentParentIsLast = [...parentIsLast, isLastChild]\n const currentEntry = { entry, indentLevel, parentIsLast: currentParentIsLast }\n if (entry.children && entry.children.length > 0 && isExpanded(entry.absolutePath, entry.relativePath)) {\n return [currentEntry, ...getFlattenEntries(entry.children, isExpanded, currentParentIsLast, indentLevel + 1)]\n }\n return [currentEntry]\n })\n}\n\n/**\n * @component DirectoryTree\n * @description A component to display a directory tree structure. It allows navigation and selection of files.\n * ディレクトリツリー構造を表示するコンポーネント。ファイルのナビゲーションと選択が可能。\n * @param {DirectoryTreeProps} props - The props for the component.\n * @returns {JSX.Element} The DirectoryTree component.\n */\nexport const DirectoryTree = ({\n entries,\n onFileSelect,\n className,\n style,\n selectedPath,\n toggle,\n isExpanded,\n expandMultiple,\n collapseMultiple,\n isPending,\n doubleClickAction = \"recursive\",\n selectionMode = \"none\",\n selectedItems,\n onSelectionChange,\n lineColor = \"#A0AEC0\",\n virtualScrollOptions\n}: DirectoryTreeProps) => {\n const [isClient, setIsClient] = useState(false)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const virtualScrollRef = useRef<VirtualScrollHandle>(null)\n const [viewportHeight, setViewportHeight] = useState(0)\n const [renderingRange, setRenderingRange] = useState<{ renderStart: number; renderEnd: number } | null>(null)\n const {\n overscanCount: userOverscanCount,\n className: virtualScrollClassName,\n background: virtualScrollBackground,\n onScroll: virtualScrollOnScroll,\n onRangeChange: virtualScrollOnRangeChange,\n initialScrollIndex,\n initialScrollOffset,\n tapScrollCircleOptions,\n scrollBarWidth,\n enableThumbDrag,\n enableTrackClick,\n enableArrowButtons,\n enablePointerDrag,\n inertiaOptions\n }: DirectoryTreeVirtualScrollOptions = virtualScrollOptions ?? {}\n const initialScrollPosition = typeof initialScrollOffset === \"number\" ? initialScrollOffset : 0\n const [scrollPosition, setScrollPosition] = useState(initialScrollPosition)\n const resolvedOverscanCount = typeof userOverscanCount === \"number\" ? userOverscanCount : 10\n\n const handleVirtualScroll = useCallback(\n (position: number, totalHeight: number) => {\n setScrollPosition(position)\n virtualScrollOnScroll?.(position, totalHeight)\n },\n [virtualScrollOnScroll]\n )\n\n const handleRangeChange = useCallback(\n (renderingStartIndex: number, renderingEndIndex: number, visibleStartIndex: number, visibleEndIndex: number, position: number, totalHeight: number) => {\n setRenderingRange((previous) => {\n if (previous && previous.renderStart === renderingStartIndex && previous.renderEnd === renderingEndIndex) {\n return previous\n }\n return { renderStart: renderingStartIndex, renderEnd: renderingEndIndex }\n })\n virtualScrollOnRangeChange?.(renderingStartIndex, renderingEndIndex, visibleStartIndex, visibleEndIndex, position, totalHeight)\n },\n [virtualScrollOnRangeChange]\n )\n\n useEffect(() => {\n if (typeof initialScrollOffset === \"number\") {\n setScrollPosition(initialScrollOffset)\n }\n }, [initialScrollOffset])\n\n useEffect(() => {\n setIsClient(true)\n\n // Webkit スクロールバー非表示スタイルを適用\n applyWebkitScrollbarHide()\n\n if (containerRef.current) {\n setViewportHeight(containerRef.current.clientHeight)\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setViewportHeight(entry.contentRect.height)\n }\n })\n resizeObserver.observe(containerRef.current)\n return () => resizeObserver.disconnect()\n }\n }, [])\n\n const safeIsExpanded = useCallback(\n (path: string) => {\n return isClient ? isExpanded(path) : false\n },\n [isClient, isExpanded],\n )\n\n // Tailwindクラス名を動的に生成\n const containerClasses = isPending\n ? `${directoryTreeClasses.container} ${directoryTreeClasses.containerPending}`\n : directoryTreeClasses.container\n\n const handleDirectoryDoubleClick = useCallback(\n (entry: DirectoryEntry, overrideDoubleClickAction?: \"toggle\" | \"recursive\") => {\n const descendantPaths = getAllDescendantPaths(entry)\n const allPaths = [entry.absolutePath, ...descendantPaths]\n\n const action = overrideDoubleClickAction || doubleClickAction\n\n // ダブルクリックされたディレクトリと、そのすべての子孫ディレクトリが展開されているかを確認する\n const areAllExpanded = allPaths.every((path) => safeIsExpanded(path))\n\n if (areAllExpanded) {\n // すべてが開いている場合は、すべて折りたたむ\n collapseMultiple(allPaths)\n } else {\n // すべてが開いていない場合 (つまり、1つでも閉じている場合)\n\n // ダブルクリックされたディレクトリと、そのすべての子孫ディレクトリが閉じているかを確認する\n const areAllCollapsed = allPaths.every((path) => !safeIsExpanded(path))\n\n if (areAllCollapsed) {\n // すべてが閉じている場合は、すべて展開する\n expandMultiple(allPaths)\n } else if (action === \"recursive\") {\n // 1つでも閉じている場合は、すべて展開する\n expandMultiple(allPaths)\n } else if (action === \"toggle\") {\n // 1つでも開いている場合は、すべて折りたたむ\n collapseMultiple(allPaths)\n } else {\n console.warn(`[DirectoryTree] Unknown double click action: ${action}. No action taken.`)\n }\n }\n },\n [safeIsExpanded, expandMultiple, collapseMultiple, doubleClickAction],\n )\n\n const allLineItems = useMemo(() => {\n if (entries.length === 0) {\n return [] // entries が空の場合は空配列を返す\n }\n const items: TreeLineItemInfo[] = []\n function collectItems(currentEntries: DirectoryEntry[], level: number, parentIsLastChain: boolean[]) {\n currentEntries.forEach((entry, index) => {\n const isDir = entry.children !== undefined\n const currentFullPath = entry.absolutePath\n const isCurrentlyExpanded = isDir && safeIsExpanded(currentFullPath)\n\n const lineItem: TreeLineItemInfo = {\n id: currentFullPath,\n name: entry.name,\n absolutePath: currentFullPath,\n indentLevel: level,\n isLastChild: index === currentEntries.length - 1,\n isDirectory: isDir,\n isExpanded: isCurrentlyExpanded,\n ancestorIsLast: [...parentIsLastChain], // 祖先の状態をコピーして渡す\n }\n items.push(lineItem)\n\n if (isDir && isCurrentlyExpanded && entry.children) {\n collectItems(entry.children, level + 1, [...parentIsLastChain, index === currentEntries.length - 1])\n }\n })\n }\n collectItems(entries, 0, [])\n return items\n }, [entries, safeIsExpanded])\n\n const virtualItems = useMemo(() => {\n return getFlattenEntries(entries, safeIsExpanded)\n }, [entries, safeIsExpanded])\n\n // TreeLine に渡す幅を計算する\n const treeLineWidth = useMemo(() => {\n if (entries.length === 0) {\n return 0 // entries が空の場合は幅を 0 とする\n }\n let maxIndent = 0\n for (const item of allLineItems) {\n if (item.indentLevel > maxIndent) {\n maxIndent = item.indentLevel\n }\n }\n return (maxIndent + 2) * INDENT_SIZE // 最大インデントレベルに基づいて幅を計算し、余裕を持たせる\n }, [allLineItems, entries])\n\n const treeLineBackground = useMemo(() => {\n if (treeLineWidth <= 0 || viewportHeight <= 0) {\n return null\n }\n const renderStartIndex = renderingRange?.renderStart ?? Math.max(0, Math.floor(scrollPosition / ITEM_HEIGHT))\n const fallbackSpan = viewportHeight > 0 ? Math.ceil(viewportHeight / ITEM_HEIGHT) + resolvedOverscanCount : resolvedOverscanCount\n const fallbackEndIndex = virtualItems.length > 0 ? Math.min(virtualItems.length - 1, renderStartIndex + fallbackSpan) : renderStartIndex\n const renderEndIndex = renderingRange?.renderEnd ?? fallbackEndIndex\n const lookaheadEndIndex = virtualItems.length > 0 ? Math.min(virtualItems.length - 1, renderEndIndex + resolvedOverscanCount) : renderEndIndex\n return (\n <div className=\"pointer-events-none absolute inset-0 z-0\" aria-hidden=\"true\">\n <div className=\"absolute top-0 left-0\" style={{ width: treeLineWidth, height: viewportHeight }}>\n <TreeLine\n items={allLineItems}\n itemHeight={ITEM_HEIGHT}\n width={treeLineWidth}\n segmentWidth={INDENT_SIZE}\n color={lineColor}\n renderFromY={scrollPosition}\n renderHeight={viewportHeight}\n renderStartIndex={renderStartIndex}\n renderEndIndex={renderEndIndex}\n lookaheadEndIndex={lookaheadEndIndex}\n />\n </div>\n </div>\n )\n }, [treeLineWidth, viewportHeight, renderingRange, scrollPosition, resolvedOverscanCount, virtualItems.length, allLineItems, lineColor])\n\n // エントリがない場合は、シンプルなコンテナのみをレンダリングする\n if (entries.length === 0) {\n return <div className={`${containerClasses} ${className || ''}`} style={{...style, ...scrollbarHideStyle}} />\n }\n\n return (\n <div ref={containerRef} className={`${containerClasses} ${className || ''}`} style={{...style, ...scrollbarHideStyle}} role=\"tree\">\n <VirtualScrollExtended\n ref={virtualScrollRef}\n itemCount={virtualItems.length}\n getItem={(index) => virtualItems[index]}\n getItemHeight={() => ITEM_HEIGHT}\n viewportSize={viewportHeight}\n overscanCount={resolvedOverscanCount}\n onScroll={handleVirtualScroll}\n onRangeChange={handleRangeChange}\n className={virtualScrollClassName}\n background={(\n <>\n {treeLineBackground}\n {virtualScrollBackground}\n </>\n )}\n initialScrollIndex={initialScrollIndex}\n initialScrollOffset={initialScrollOffset}\n tapScrollCircleOptions={tapScrollCircleOptions}\n scrollBarWidth={scrollBarWidth}\n enableThumbDrag={enableThumbDrag}\n enableTrackClick={enableTrackClick}\n enableArrowButtons={enableArrowButtons}\n enablePointerDrag={enablePointerDrag}\n inertiaOptions={inertiaOptions}>\n {(item, _index) => {\n if (!item) {\n return null // item が undefined の場合は何もレンダリングしない\n }\n const { entry, indentLevel, parentIsLast } = item\n return (\n <DirectoryEntryItem\n key={entry.absolutePath}\n entry={entry}\n indentLevel={indentLevel}\n isDirOpen={safeIsExpanded}\n onFileSelect={onFileSelect}\n toggleDirectory={toggle}\n onToggleDirectoryRecursive={handleDirectoryDoubleClick}\n selectedPath={selectedPath}\n parentIsLast={parentIsLast}\n renderChildren={false}\n selectionMode={selectionMode}\n selectedItems={selectedItems}\n onSelectionChange={onSelectionChange}\n />\n )\n }}\n </VirtualScrollExtended>\n </div>\n )\n}\n\n// スタイル関連のオブジェクトと関数を export\nexport { directoryTreeClasses, getEntryClasses, getExpandIconClasses, getTypeIconClasses, getNameClasses }\n","import { useCallback, useEffect, useState, useTransition } from \"react\"\nimport type { DirectoryTreeState, UseDirectoryTreeStateProps } from \"./types\"\n\n/**\n * A React hook for managing the state of a directory tree.\n * ディレクトリツリーの状態を管理するための React フック。\n *\n * This hook is designed to work with Server-Side Rendering (SSR) by allowing\n * the initial expansion state to be passed in as a prop.\n * このフックは、初期の展開状態をプロパティとして渡すことで、\n * サーバーサイドレンダリング (SSR) と連携するように設計されています。\n *\n * @param props - The properties for the hook.\n * @returns The state and actions for the directory tree.\n */\nexport const useDirectoryTreeState = ({\n initialExpanded = new Set<string>(),\n storageKey\n}: UseDirectoryTreeStateProps = {}): DirectoryTreeState => {\n const [isPending, startTransition] = useTransition()\n const [expanded, setExpanded] = useState(() => {\n if (typeof window !== \"undefined\" && storageKey) {\n try {\n const item = window.localStorage.getItem(storageKey)\n if (item) {\n const parsedItem = JSON.parse(item)\n return new Set<string>(parsedItem)\n }\n } catch (error) {\n console.error(\"[useDirectoryTreeState] Error reading from localStorage\", error)\n }\n }\n return initialExpanded\n })\n\n useEffect(() => {\n if (storageKey && typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(Array.from(expanded)))\n } catch (error) {\n console.warn(`Error setting localStorage key \"${storageKey}\":`, error)\n }\n }\n }, [expanded, storageKey])\n\n const toggle = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(path)) {\n next.delete(path)\n } else {\n next.add(path)\n }\n return next\n })\n })\n }, [])\n\n const expand = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (!next.has(path)) {\n next.add(path)\n }\n return next\n })\n })\n }, [])\n\n const collapse = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(path)) {\n next.delete(path)\n }\n return next\n })\n })\n }, [])\n\n const collapseMultiple = useCallback((paths: string[]) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n for (const path of paths) {\n if (next.has(path)) {\n next.delete(path)\n }\n }\n return next\n })\n })\n }, [])\n\n const expandMultiple = useCallback((paths: string[]) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n for (const path of paths) {\n if (!next.has(path)) {\n next.add(path)\n }\n }\n return next\n })\n })\n }, [])\n\n const collapseAll = useCallback(() => {\n startTransition(() => {\n setExpanded(new Set())\n })\n }, [])\n\n const isExpanded = useCallback((path: string) => expanded.has(path), [expanded])\n\n return {\n expanded,\n toggle,\n expand,\n collapse,\n collapseMultiple,\n expandMultiple,\n collapseAll,\n isExpanded,\n isPending,\n }\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","TreeLine","items","itemHeight","width","segmentWidth","color","strokeWidth","renderFromY","renderHeight","renderStartIndex","renderEndIndex","lookaheadEndIndex","paths","effectiveRenderHeight","computedStartIndex","defaultEndExclusive","computedEndExclusive","endInclusive","lookaheadExclusive","candidate","itemIndex","item","yBase","yCenter","i","x","drawVerticalLine","connectorXBase","connectorX","iconSpace","svgHeight","jsxs","jsx","index","directoryTreeClasses","twMerge","scrollbarHideStyle","applyWebkitScrollbarHide","styleElement","getEntryClasses","isHovered","isSelected","isItemSelected","getExpandIconClasses","getTypeIconClasses","getNameClasses","isDirectory","VirtualScrollExtended","VirtualScroll","getFileExtension","filename","DirectoryEntryItem","memo","entry","indentLevel","isDirOpen","onFileSelect","toggleDirectory","onToggleDirectoryRecursive","selectedPath","parentIsLast","renderChildren","selectionMode","selectedItems","onSelectionChange","clickTimer","useRef","childrenToRender","setChildrenToRender","useState","useEffect","isExpanded","handleInteraction","useCallback","e","setIsHovered","entryClasses","expandIconClasses","typeIconClasses","nameClasses","Fragment","INDENT_SIZE","ITEM_HEIGHT","ChevronDownIcon","ChevronRightIcon","FolderIcon","DocumentTextIcon","FileIcon","child","prevProps","nextProps","prevIsDirectory","nextIsDirectory","prevIsExpanded","nextIsExpanded","getAllDescendantPaths","getFlattenEntries","entries","isLastChild","currentParentIsLast","currentEntry","DirectoryTree","className","style","toggle","expandMultiple","collapseMultiple","isPending","doubleClickAction","lineColor","virtualScrollOptions","isClient","setIsClient","containerRef","virtualScrollRef","viewportHeight","setViewportHeight","renderingRange","setRenderingRange","userOverscanCount","virtualScrollClassName","virtualScrollBackground","virtualScrollOnScroll","virtualScrollOnRangeChange","initialScrollIndex","initialScrollOffset","tapScrollCircleOptions","scrollBarWidth","enableThumbDrag","enableTrackClick","enableArrowButtons","enablePointerDrag","inertiaOptions","initialScrollPosition","scrollPosition","setScrollPosition","resolvedOverscanCount","handleVirtualScroll","position","totalHeight","handleRangeChange","renderingStartIndex","renderingEndIndex","visibleStartIndex","visibleEndIndex","previous","resizeObserver","safeIsExpanded","path","containerClasses","handleDirectoryDoubleClick","overrideDoubleClickAction","descendantPaths","allPaths","action","allLineItems","useMemo","collectItems","currentEntries","level","parentIsLastChain","isDir","currentFullPath","isCurrentlyExpanded","lineItem","virtualItems","treeLineWidth","maxIndent","treeLineBackground","fallbackSpan","fallbackEndIndex","_index","useDirectoryTreeState","initialExpanded","storageKey","startTransition","useTransition","expanded","setExpanded","parsedItem","error","prev","next","expand","collapse","collapseAll"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js","../src/TreeLine.tsx","../src/DirectoryTree.tsx","../src/useDirectoryTreeState.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * A component to render SVG lines for the directory tree.\n *\n * ディレクトリツリーの階層線を描画する SVG コンポーネント。\n */\n\nimport type { TreeLineProps } from \"./types\"\n\n/**\n * Renders SVG lines for a directory tree structure.\n *\n * ディレクトリツリー構造の SVG ラインを描画。\n *\n * @param props - コンポーネントの Props。\n * @returns TreeLine コンポーネント。\n */\nconst TreeLine = ({ items, itemHeight, width, segmentWidth, color = \"#a0aec0\", strokeWidth = 1, renderFromY = 0, renderHeight, renderStartIndex, renderEndIndex, lookaheadEndIndex }: TreeLineProps) => {\n const paths: string[] = []\n\n const effectiveRenderHeight = renderHeight ?? items.length * itemHeight\n const computedStartIndex = (() => {\n if (typeof renderStartIndex === \"number\" && Number.isFinite(renderStartIndex)) {\n return Math.max(0, Math.floor(renderStartIndex))\n }\n return Math.max(0, Math.floor(renderFromY / itemHeight))\n })()\n const defaultEndExclusive = Math.min(items.length, Math.ceil((renderFromY + effectiveRenderHeight) / itemHeight))\n const computedEndExclusive = (() => {\n if (typeof renderEndIndex === \"number\" && Number.isFinite(renderEndIndex)) {\n const endInclusive = Math.floor(renderEndIndex)\n return Math.max(Math.min(items.length, endInclusive + 1), computedStartIndex)\n }\n return Math.max(defaultEndExclusive, computedStartIndex)\n })()\n const lookaheadExclusive = (() => {\n if (typeof lookaheadEndIndex === \"number\" && Number.isFinite(lookaheadEndIndex)) {\n const endInclusive = Math.floor(lookaheadEndIndex)\n const candidate = Math.min(items.length, endInclusive + 1)\n return Math.max(candidate, computedEndExclusive)\n }\n return Math.max(defaultEndExclusive, computedEndExclusive)\n })()\n\n for (let itemIndex = computedStartIndex; itemIndex < computedEndExclusive; itemIndex++) {\n const item = items[itemIndex]\n const yBase = itemIndex * itemHeight\n const yCenter = yBase + itemHeight / 2\n\n // 祖先の線を描画\n for (let i = 0; i < item.indentLevel; i++) {\n const x = i * segmentWidth + segmentWidth / 2\n // この祖先ポイントから下に線を引くべきかどうかを確認\n // これは、同じまたはより深いレベルの後続アイテムが\n // この祖先の子であるかどうかに依存\n let drawVerticalLine = false\n for (let k = itemIndex; k < lookaheadExclusive; k++) {\n if (items[k].indentLevel > i && items[k].ancestorIsLast.length > i && !items[k].ancestorIsLast[i]) {\n drawVerticalLine = true\n break\n }\n if (items[k].indentLevel === i && k > itemIndex) {\n // 関連する兄弟要素を過ぎた\n break\n }\n }\n\n // 祖先の縦線にはアイコンスペースを設けない\n // drawVerticalLine は、その祖先ラインが下まで続く必要があるかどうかを判定\n // !item.ancestorIsLast[i] は、現在のアイテムの祖先 (i) が最後の子ではないことを確認 (つまり、線が続くべき)\n if (drawVerticalLine && item.ancestorIsLast.length > i && !item.ancestorIsLast[i]) {\n paths.push(`M ${x},${yBase} L ${x},${yBase + itemHeight}`)\n }\n }\n\n // 現在のアイテムの接続線を描画\n const connectorXBase = item.indentLevel * segmentWidth\n const connectorX = connectorXBase + segmentWidth / 2\n\n // L 字または T 字の垂直部分\n if (item.isDirectory) {\n const iconSpace = segmentWidth / 1.5 // アイコンスペースを調整\n paths.push(`M ${connectorX},${yBase} L ${connectorX},${yCenter - iconSpace}`) // アイコンスペースの上端までの線、上側のスペースを広げる\n } else {\n paths.push(`M ${connectorX},${yBase} L ${connectorX},${yCenter}`) // ファイルの場合は完全な線\n }\n\n // L 字または T 字の水平部分\n // ディレクトリ、または最後の子であるファイルの場合に描画\n if (item.isDirectory) {\n // ディレクトリの場合は、展開アイコンのために線に間を空ける\n // 右線は不要なので、左側の短い線のみ描画、もしくは何も描画しない\n // 現状では右線だけでなく、水平線全体が不要という解釈で何もしない\n } else if (item.isLastChild) {\n // ディレクトリではなく、最後の子であるファイルの場合\n paths.push(`M ${connectorX},${yCenter} L ${connectorXBase + segmentWidth},${yCenter}`)\n }\n\n // 兄弟の中で最後の子でない場合、垂直線を下に伸ばす\n if (!item.isLastChild) {\n if (item.isDirectory) {\n const iconSpace = segmentWidth / 1.5 // アイコンスペースを調整\n paths.push(`M ${connectorX},${yCenter + iconSpace} L ${connectorX},${yBase + itemHeight}`) // 下側のスペースを広げる\n } else {\n paths.push(`M ${connectorX},${yCenter} L ${connectorX},${yBase + itemHeight}`)\n }\n }\n }\n\n const svgHeight = items.length * itemHeight\n\n return (\n <svg\n width={width}\n height={renderHeight ?? svgHeight}\n viewBox={`0 ${renderFromY} ${width} ${renderHeight ?? svgHeight}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"pointer-events-none absolute top-0 left-0 z-0 opacity-75\" // コンテンツの背面に配置し、透明度を追加\n >\n <title>Tree Lines</title>\n {paths.map((d, index) => (\n <path key={`path-${items[computedStartIndex + index]?.id || index}-${computedStartIndex + index}`} d={d} stroke={color} strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ))}\n </svg>\n )\n}\n\nexport { TreeLine }\n","/**\n * @module DirectoryTree\n * @description A component to display a directory tree structure.\n * ディレクトリツリー構造を表示するためのコンポーネント。\n */\nimport { type ScrollBarTapCircleOptions, type ScrollPaneInertiaOptions, VirtualScroll, type VirtualScrollHandle } from \"@aiquants/virtualscroll\"\nimport { ChevronDownIcon, ChevronRightIcon, DocumentTextIcon, FolderIcon } from \"@heroicons/react/24/solid\"\nimport { FileIcon } from \"@phosphor-icons/react\"\nimport type { CSSProperties, MouseEvent, ReactElement, ReactNode, Ref } from \"react\"\nimport { Fragment, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { TreeLine } from \"./TreeLine.tsx\"\nimport type { DirectoryEntry, DirectoryEntryItemProps, DirectoryTreeProps, DirectoryTreeVirtualScrollOptions, TreeLineItemInfo } from \"./types.ts\"\n\n/**\n * TailwindCSS v4 class names for DirectoryTree component\n * DirectoryTreeコンポーネント用の TailwindCSS v4 クラス名\n */\nconst directoryTreeClasses = {\n container: \"directory-tree-container relative h-full transition-opacity duration-300 overflow-y-hidden pb-[5px] pr-[1px] pr-[3px]\",\n containerPending: \"opacity-70\",\n\n entry: \"flex items-center cursor-pointer relative select-none\",\n\n // ホバー時のスタイル(ライト/ダークモード対応)\n entryHover: twMerge(\"hover:bg-gray-400/15\", \"dark:hover:bg-gray-200/10\"),\n\n // 選択時のスタイル(ライト/ダークモード対応)\n entrySelected: twMerge(\"bg-blue-400/10\", \"dark:bg-blue-400/15\"),\n\n // アイテム選択時のスタイル(ライト/ダークモード対応)\n entryItemSelected: twMerge(\"bg-blue-400/20 shadow-[0_0_0_1px_rgba(59,130,246,0.3)]\", \"dark:bg-blue-400/25 dark:shadow-[0_0_0_1px_rgba(96,165,250,0.4)]\"),\n\n // アイコンのスタイル\n expandIcon: twMerge(\"w-5 h-5 flex-shrink-0 flex items-center justify-center\", \"text-gray-500\", \"dark:text-gray-400\"),\n\n expandIconSelected: twMerge(\"text-blue-700\", \"dark:text-blue-400\"),\n\n typeIcon: twMerge(\"w-5 h-5 flex-shrink-0 flex items-center justify-center\", \"text-gray-500\", \"dark:text-gray-400\"),\n\n typeIconSelected: twMerge(\"text-blue-700\", \"dark:text-blue-400\"),\n\n // テキストのスタイル\n name: twMerge(\"overflow-hidden text-ellipsis whitespace-nowrap ml-1\", \"text-gray-700\", \"dark:text-gray-200\"),\n\n nameDirectory: \"font-bold\",\n\n nameSelected: twMerge(\"text-blue-800 font-medium\", \"dark:text-blue-300\"),\n}\n\n/**\n * カスタムスクロールバー非表示スタイル\n * Custom styles to hide scrollbar\n */\nconst scrollbarHideStyle: CSSProperties = {\n msOverflowStyle: \"none\" /* IE and Edge */,\n scrollbarWidth: \"none\" /* Firefox */,\n}\n\n/**\n * Webkit スクロールバー非表示のスタイルを動的に適用\n * Apply webkit scrollbar hiding styles dynamically\n */\nconst applyWebkitScrollbarHide = () => {\n // 既存のスタイルタグがあるかチェック\n let styleElement = document.getElementById(\"directory-tree-webkit-scrollbar-hide\")\n\n if (!styleElement) {\n styleElement = document.createElement(\"style\")\n styleElement.id = \"directory-tree-webkit-scrollbar-hide\"\n styleElement.textContent = \".directory-tree-container::-webkit-scrollbar { display: none; }\"\n document.head.appendChild(styleElement)\n }\n}\n\n/**\n * Get combined class names for entry element\n * エントリー要素の結合されたクラス名を取得\n */\nconst getEntryClasses = (isHovered: boolean = false, isSelected: boolean = false, isItemSelected: boolean = false): string => {\n return twMerge(directoryTreeClasses.entry, isHovered && directoryTreeClasses.entryHover, isSelected && directoryTreeClasses.entrySelected, isItemSelected && directoryTreeClasses.entryItemSelected)\n}\n\n/**\n * Get combined class names for expand icon\n * 展開アイコンの結合されたクラス名を取得\n */\nconst getExpandIconClasses = (isSelected: boolean = false): string => {\n return twMerge(directoryTreeClasses.expandIcon, isSelected && directoryTreeClasses.expandIconSelected)\n}\n\n/**\n * Get combined class names for type icon\n * タイプアイコンの結合されたクラス名を取得\n */\nconst getTypeIconClasses = (isSelected: boolean = false): string => {\n return twMerge(directoryTreeClasses.typeIcon, isSelected && directoryTreeClasses.typeIconSelected)\n}\n\n/**\n * Get combined class names for name text\n * 名前テキストの結合されたクラス名を取得\n */\nconst getNameClasses = (isDirectory: boolean = false, isSelected: boolean = false): string => {\n return twMerge(directoryTreeClasses.name, isDirectory && directoryTreeClasses.nameDirectory, isSelected && directoryTreeClasses.nameSelected)\n}\n\ntype DirectoryTreeVirtualScrollComponentProps<T> = {\n itemCount: number\n getItem: (index: number) => T\n getItemHeight: (index: number) => number\n viewportSize: number\n overscanCount?: number\n className?: string\n onScroll?: (scrollPosition: number, totalHeight: number) => void\n onRangeChange?: (renderingStartIndex: number, renderingEndIndex: number, visibleStartIndex: number, visibleEndIndex: number, scrollPosition: number, totalHeight: number) => void\n background?: ReactNode\n children: (item: T, index: number) => ReactNode\n initialScrollIndex?: number\n initialScrollOffset?: number\n tapScrollCircleOptions?: ScrollBarTapCircleOptions\n scrollBarWidth?: number\n enableThumbDrag?: boolean\n enableTrackClick?: boolean\n enableArrowButtons?: boolean\n enablePointerDrag?: boolean\n inertiaOptions?: ScrollPaneInertiaOptions\n ref?: Ref<VirtualScrollHandle>\n}\n\nconst VirtualScrollExtended = VirtualScroll as unknown as <T>(props: DirectoryTreeVirtualScrollComponentProps<T>) => ReactElement\n\n/**\n * @function getFileExtension\n * @description Extracts the extension from a filename.\n * ファイル名から拡張子を抽出する。\n * @param {string} filename - The filename. ファイル名。\n * @returns {string} The file extension in lowercase. 小文字のファイル拡張子。\n */\nconst getFileExtension = (filename: string): string => {\n return filename.slice(((filename.lastIndexOf(\".\") - 1) >>> 0) + 2).toLowerCase()\n}\n\n/**\n * @component DirectoryEntryItem\n * @description Renders a single entry (file or directory) in the directory tree. Memoized for performance.\n * ディレクトリツリー内の単一エントリ (ファイルまたはディレクトリ) をレンダリングする。パフォーマンスのためにメモ化されている。\n * @param {DirectoryEntryItemProps} props - The props for the component.\n * @returns {JSX.Element} The DirectoryEntryItem component.\n */\nconst DirectoryEntryItem = memo<DirectoryEntryItemProps>(\n ({ entry, indentLevel, isDirOpen, onFileSelect, toggleDirectory, onToggleDirectoryRecursive, selectedPath, parentIsLast, renderChildren = true, selectionMode = \"none\", selectedItems, onSelectionChange }) => {\n const clickTimer = useRef<number | null>(null)\n const [childrenToRender, setChildrenToRender] = useState<DirectoryEntry[] | null>(null)\n\n useEffect(() => {\n // コンポーネントがアンマウントされる際にタイマーをクリアする\n return () => {\n if (clickTimer.current) {\n window.clearTimeout(clickTimer.current)\n }\n }\n }, [])\n\n const isDirectory = entry.children !== undefined\n const isExpanded = isDirectory && isDirOpen(entry.absolutePath, entry.relativePath)\n const isSelected = entry.absolutePath === selectedPath\n const isItemSelected = !isDirectory && selectedItems?.has(entry.absolutePath)\n\n useEffect(() => {\n if (isExpanded && entry.children) {\n Promise.resolve().then(() => {\n setChildrenToRender(entry.children ?? [])\n })\n } else {\n setChildrenToRender(null)\n }\n }, [isExpanded, entry.children])\n\n const handleInteraction = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n // 選択機能が有効で、かつファイルの場合のみ選択状態を変更\n if (selectionMode !== \"none\" && !isDirectory && onSelectionChange) {\n onSelectionChange(entry.absolutePath, !isItemSelected)\n }\n\n if (isDirectory) {\n // ディレクトリに対するクリック操作を処理する\n if (clickTimer.current) {\n // ダブルクリックを検出した場合、タイマーをクリアしてコールバックを実行する\n window.clearTimeout(clickTimer.current)\n clickTimer.current = null\n onToggleDirectoryRecursive(entry)\n } else {\n // シングルクリックの場合、タイマーを設定してダブルクリックの可能性を待つ\n clickTimer.current = window.setTimeout(() => {\n toggleDirectory(entry.absolutePath, entry.relativePath)\n clickTimer.current = null\n }, 500) // 500ms をダブルクリックのしきい値とする\n }\n } else {\n // ファイルの場合は、ファイル選択イベントを発生させる\n onFileSelect(entry.absolutePath, entry.relativePath)\n }\n },\n [isDirectory, entry, onToggleDirectoryRecursive, toggleDirectory, onFileSelect, selectionMode, onSelectionChange, isItemSelected],\n )\n\n // ホバー状態管理\n const [isHovered, setIsHovered] = useState(false)\n\n // Tailwindクラス名を動的に生成\n const entryClasses = getEntryClasses(isHovered, isSelected, isItemSelected)\n const expandIconClasses = getExpandIconClasses(isSelected || isItemSelected)\n const typeIconClasses = getTypeIconClasses(isSelected || isItemSelected)\n const nameClasses = getNameClasses(isDirectory, isSelected || isItemSelected)\n\n return (\n <Fragment key={entry.absolutePath}>\n <div\n className={entryClasses}\n style={{\n paddingLeft: `${indentLevel * INDENT_SIZE}px`,\n height: `${ITEM_HEIGHT}px`,\n }}\n onClick={handleInteraction}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleInteraction(e as unknown as MouseEvent<HTMLDivElement>)\n }\n }}\n tabIndex={0}\n role=\"treeitem\"\n aria-expanded={isDirectory ? isExpanded : undefined}\n aria-label={`${entry.name} (${isDirectory ? \"directory\" : \"file\"})`}>\n <span className={expandIconClasses}>{isDirectory ? isExpanded ? <ChevronDownIcon className=\"h-4 w-4\" /> : <ChevronRightIcon className=\"h-4 w-4\" /> : <span className=\"w-4\" />}</span>\n <span className={typeIconClasses}>\n {isDirectory ? (\n <FolderIcon className=\"h-4 w-4\" />\n ) : (\n (() => {\n const extension = getFileExtension(entry.name)\n switch (extension) {\n case \"md\":\n return <DocumentTextIcon className=\"h-4 w-4\" />\n default:\n return <FileIcon className=\"h-4 w-4\" />\n }\n })()\n )}\n </span>\n <span className={nameClasses}>{entry.name}</span>\n </div>\n {isExpanded && childrenToRender && renderChildren && (\n <fieldset>\n {childrenToRender.map((child, index) => (\n <DirectoryEntryItem\n key={child.absolutePath}\n entry={child}\n indentLevel={indentLevel + 1}\n isDirOpen={isDirOpen}\n onFileSelect={onFileSelect}\n toggleDirectory={toggleDirectory}\n onToggleDirectoryRecursive={onToggleDirectoryRecursive}\n selectedPath={selectedPath}\n parentIsLast={[...parentIsLast, index === (childrenToRender || []).length - 1]}\n selectionMode={selectionMode}\n selectedItems={selectedItems}\n onSelectionChange={onSelectionChange}\n />\n ))}\n </fieldset>\n )}\n </Fragment>\n )\n },\n (prevProps, nextProps) => {\n // entry オブジェクトの主要なプロパティを比較する\n if (\n prevProps.entry.absolutePath !== nextProps.entry.absolutePath ||\n prevProps.entry.relativePath !== nextProps.entry.relativePath ||\n prevProps.entry.name !== nextProps.entry.name ||\n prevProps.entry.type !== nextProps.entry.type ||\n (prevProps.entry.children === undefined) !== (nextProps.entry.children === undefined)\n ) {\n return false // entry の基本情報が変更されていれば再レンダリングする\n }\n\n // ディレクトリの展開状態を比較する\n const prevIsDirectory = prevProps.entry.children !== undefined\n const nextIsDirectory = nextProps.entry.children !== undefined\n const prevIsExpanded = prevIsDirectory && prevProps.isDirOpen(prevProps.entry.absolutePath, prevProps.entry.relativePath)\n const nextIsExpanded = nextIsDirectory && nextProps.isDirOpen(nextProps.entry.absolutePath, nextProps.entry.relativePath)\n\n // その他の props を比較する\n if (\n prevProps.indentLevel !== nextProps.indentLevel ||\n prevIsExpanded !== nextIsExpanded ||\n prevProps.selectedPath !== nextProps.selectedPath ||\n prevProps.onFileSelect !== nextProps.onFileSelect || // onFileSelect はメモ化されていることを期待\n prevProps.toggleDirectory !== nextProps.toggleDirectory || // toggleDirectory はメモ化されていることを期待\n prevProps.onToggleDirectoryRecursive !== nextProps.onToggleDirectoryRecursive ||\n prevProps.selectionMode !== nextProps.selectionMode ||\n prevProps.selectedItems !== nextProps.selectedItems ||\n prevProps.onSelectionChange !== nextProps.onSelectionChange\n ) {\n return false // これらの props が変更されていれば再レンダリングする\n }\n\n // 親が最後の子であるかの情報を格納した配列を比較する\n if (prevProps.parentIsLast.length !== nextProps.parentIsLast.length) {\n return false\n }\n for (let i = 0; i < prevProps.parentIsLast.length; i++) {\n if (prevProps.parentIsLast[i] !== nextProps.parentIsLast[i]) {\n return false // 配列の要素が一つでも異なれば再レンダリングする\n }\n }\n\n return true // すべての比較条件で変更がなければ再レンダリングをスキップする\n },\n)\nDirectoryEntryItem.displayName = \"DirectoryEntryItem\"\n\n// TreeLine コンポーネントが使用する props の型は TreeLine.tsx からインポートされる\n\nconst ITEM_HEIGHT = 20 // 各アイテムの高さ (px)\nconst INDENT_SIZE = 16 // 1階層あたりのインデント幅 (px)\n\n/**\n * @function getAllDescendantPaths\n * @description Recursively gets all descendant directory paths for a given entry.\n * 指定されたエントリのすべての子孫ディレクトリパスを再帰的に取得する。\n * @param {DirectoryEntry} entry - The directory entry to start from. 開始点となるディレクトリのエントリ。\n * @returns {string[]} An array of absolute paths of all descendant directories. すべての子孫ディレクトリの絶対パスの配列。\n */\nconst getAllDescendantPaths = (entry: DirectoryEntry): string[] => {\n const paths: string[] = []\n if (entry.children) {\n for (const child of entry.children) {\n if (child.type === \"directory\") {\n paths.push(child.absolutePath)\n paths.push(...getAllDescendantPaths(child))\n }\n }\n }\n return paths\n}\n\nconst getFlattenEntries = (entries: DirectoryEntry[], isExpanded: (absolutePath: string, relativePath: string) => boolean, parentIsLast: boolean[] = [], indentLevel = 0): { entry: DirectoryEntry; indentLevel: number; parentIsLast: boolean[] }[] => {\n return entries.flatMap((entry, index) => {\n const isLastChild = index === entries.length - 1\n const currentParentIsLast = [...parentIsLast, isLastChild]\n const currentEntry = { entry, indentLevel, parentIsLast: currentParentIsLast }\n if (entry.children && entry.children.length > 0 && isExpanded(entry.absolutePath, entry.relativePath)) {\n return [currentEntry, ...getFlattenEntries(entry.children, isExpanded, currentParentIsLast, indentLevel + 1)]\n }\n return [currentEntry]\n })\n}\n\n/**\n * @component DirectoryTree\n * @description A component to display a directory tree structure. It allows navigation and selection of files.\n * ディレクトリツリー構造を表示するコンポーネント。ファイルのナビゲーションと選択が可能。\n * @param {DirectoryTreeProps} props - The props for the component.\n * @returns {JSX.Element} The DirectoryTree component.\n */\nexport const DirectoryTree = ({\n entries,\n onFileSelect,\n className,\n style,\n selectedPath,\n toggle,\n isExpanded,\n expandMultiple,\n collapseMultiple,\n isPending,\n doubleClickAction = \"recursive\",\n selectionMode = \"none\",\n selectedItems,\n onSelectionChange,\n lineColor = \"#A0AEC0\",\n virtualScrollOptions,\n}: DirectoryTreeProps) => {\n const [isClient, setIsClient] = useState(false)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const virtualScrollRef = useRef<VirtualScrollHandle>(null)\n const [viewportHeight, setViewportHeight] = useState(0)\n const [renderingRange, setRenderingRange] = useState<{ renderStart: number; renderEnd: number } | null>(null)\n const {\n overscanCount: userOverscanCount,\n className: virtualScrollClassName,\n background: virtualScrollBackground,\n onScroll: virtualScrollOnScroll,\n onRangeChange: virtualScrollOnRangeChange,\n initialScrollIndex,\n initialScrollOffset,\n tapScrollCircleOptions,\n scrollBarWidth,\n enableThumbDrag,\n enableTrackClick,\n enableArrowButtons,\n enablePointerDrag,\n inertiaOptions,\n }: DirectoryTreeVirtualScrollOptions = virtualScrollOptions ?? {}\n const initialScrollPosition = typeof initialScrollOffset === \"number\" ? initialScrollOffset : 0\n const [scrollPosition, setScrollPosition] = useState(initialScrollPosition)\n const resolvedOverscanCount = typeof userOverscanCount === \"number\" ? userOverscanCount : 10\n\n const handleVirtualScroll = useCallback(\n (position: number, totalHeight: number) => {\n setScrollPosition(position)\n virtualScrollOnScroll?.(position, totalHeight)\n },\n [virtualScrollOnScroll],\n )\n\n const handleRangeChange = useCallback(\n (renderingStartIndex: number, renderingEndIndex: number, visibleStartIndex: number, visibleEndIndex: number, position: number, totalHeight: number) => {\n setRenderingRange((previous) => {\n if (previous && previous.renderStart === renderingStartIndex && previous.renderEnd === renderingEndIndex) {\n return previous\n }\n return { renderStart: renderingStartIndex, renderEnd: renderingEndIndex }\n })\n virtualScrollOnRangeChange?.(renderingStartIndex, renderingEndIndex, visibleStartIndex, visibleEndIndex, position, totalHeight)\n },\n [virtualScrollOnRangeChange],\n )\n\n useEffect(() => {\n if (typeof initialScrollOffset === \"number\") {\n setScrollPosition(initialScrollOffset)\n }\n }, [initialScrollOffset])\n\n useEffect(() => {\n setIsClient(true)\n\n // Webkit スクロールバー非表示スタイルを適用\n applyWebkitScrollbarHide()\n\n if (containerRef.current) {\n setViewportHeight(containerRef.current.clientHeight)\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setViewportHeight(entry.contentRect.height)\n }\n })\n resizeObserver.observe(containerRef.current)\n return () => resizeObserver.disconnect()\n }\n }, [])\n\n const safeIsExpanded = useCallback(\n (path: string) => {\n return isClient ? isExpanded(path) : false\n },\n [isClient, isExpanded],\n )\n\n // Tailwindクラス名を動的に生成\n const containerClasses = isPending ? `${directoryTreeClasses.container} ${directoryTreeClasses.containerPending}` : directoryTreeClasses.container\n\n const handleDirectoryDoubleClick = useCallback(\n (entry: DirectoryEntry, overrideDoubleClickAction?: \"toggle\" | \"recursive\") => {\n const descendantPaths = getAllDescendantPaths(entry)\n const allPaths = [entry.absolutePath, ...descendantPaths]\n\n const action = overrideDoubleClickAction || doubleClickAction\n\n // ダブルクリックされたディレクトリと、そのすべての子孫ディレクトリが展開されているかを確認する\n const areAllExpanded = allPaths.every((path) => safeIsExpanded(path))\n\n if (areAllExpanded) {\n // すべてが開いている場合は、すべて折りたたむ\n collapseMultiple(allPaths)\n } else {\n // すべてが開いていない場合 (つまり、1つでも閉じている場合)\n\n // ダブルクリックされたディレクトリと、そのすべての子孫ディレクトリが閉じているかを確認する\n const areAllCollapsed = allPaths.every((path) => !safeIsExpanded(path))\n\n if (areAllCollapsed) {\n // すべてが閉じている場合は、すべて展開する\n expandMultiple(allPaths)\n } else if (action === \"recursive\") {\n // 1つでも閉じている場合は、すべて展開する\n expandMultiple(allPaths)\n } else if (action === \"toggle\") {\n // 1つでも開いている場合は、すべて折りたたむ\n collapseMultiple(allPaths)\n } else {\n console.warn(`[DirectoryTree] Unknown double click action: ${action}. No action taken.`)\n }\n }\n },\n [safeIsExpanded, expandMultiple, collapseMultiple, doubleClickAction],\n )\n\n const allLineItems = useMemo(() => {\n if (entries.length === 0) {\n return [] // entries が空の場合は空配列を返す\n }\n const items: TreeLineItemInfo[] = []\n function collectItems(currentEntries: DirectoryEntry[], level: number, parentIsLastChain: boolean[]) {\n currentEntries.forEach((entry, index) => {\n const isDir = entry.children !== undefined\n const currentFullPath = entry.absolutePath\n const isCurrentlyExpanded = isDir && safeIsExpanded(currentFullPath)\n\n const lineItem: TreeLineItemInfo = {\n id: currentFullPath,\n name: entry.name,\n absolutePath: currentFullPath,\n indentLevel: level,\n isLastChild: index === currentEntries.length - 1,\n isDirectory: isDir,\n isExpanded: isCurrentlyExpanded,\n ancestorIsLast: [...parentIsLastChain], // 祖先の状態をコピーして渡す\n }\n items.push(lineItem)\n\n if (isDir && isCurrentlyExpanded && entry.children) {\n collectItems(entry.children, level + 1, [...parentIsLastChain, index === currentEntries.length - 1])\n }\n })\n }\n collectItems(entries, 0, [])\n return items\n }, [entries, safeIsExpanded])\n\n const virtualItems = useMemo(() => {\n return getFlattenEntries(entries, safeIsExpanded)\n }, [entries, safeIsExpanded])\n\n // TreeLine に渡す幅を計算する\n const treeLineWidth = useMemo(() => {\n if (entries.length === 0) {\n return 0 // entries が空の場合は幅を 0 とする\n }\n let maxIndent = 0\n for (const item of allLineItems) {\n if (item.indentLevel > maxIndent) {\n maxIndent = item.indentLevel\n }\n }\n return (maxIndent + 2) * INDENT_SIZE // 最大インデントレベルに基づいて幅を計算し、余裕を持たせる\n }, [allLineItems, entries])\n\n const treeLineBackground = useMemo(() => {\n if (treeLineWidth <= 0 || viewportHeight <= 0) {\n return null\n }\n const renderStartIndex = renderingRange?.renderStart ?? Math.max(0, Math.floor(scrollPosition / ITEM_HEIGHT))\n const fallbackSpan = viewportHeight > 0 ? Math.ceil(viewportHeight / ITEM_HEIGHT) + resolvedOverscanCount : resolvedOverscanCount\n const fallbackEndIndex = virtualItems.length > 0 ? Math.min(virtualItems.length - 1, renderStartIndex + fallbackSpan) : renderStartIndex\n const renderEndIndex = renderingRange?.renderEnd ?? fallbackEndIndex\n const lookaheadEndIndex = virtualItems.length > 0 ? Math.min(virtualItems.length - 1, renderEndIndex + resolvedOverscanCount) : renderEndIndex\n return (\n <div className=\"pointer-events-none absolute inset-0 z-0\" aria-hidden=\"true\">\n <div className=\"absolute top-0 left-0\" style={{ width: treeLineWidth, height: viewportHeight }}>\n <TreeLine\n items={allLineItems}\n itemHeight={ITEM_HEIGHT}\n width={treeLineWidth}\n segmentWidth={INDENT_SIZE}\n color={lineColor}\n renderFromY={scrollPosition}\n renderHeight={viewportHeight}\n renderStartIndex={renderStartIndex}\n renderEndIndex={renderEndIndex}\n lookaheadEndIndex={lookaheadEndIndex}\n />\n </div>\n </div>\n )\n }, [treeLineWidth, viewportHeight, renderingRange, scrollPosition, resolvedOverscanCount, virtualItems.length, allLineItems, lineColor])\n\n // エントリがない場合は、シンプルなコンテナのみをレンダリングする\n if (entries.length === 0) {\n return <div className={`${containerClasses} ${className || \"\"}`} style={{ ...style, ...scrollbarHideStyle }} />\n }\n\n return (\n <div ref={containerRef} className={`${containerClasses} ${className || \"\"}`} style={{ ...style, ...scrollbarHideStyle }} role=\"tree\">\n <VirtualScrollExtended\n ref={virtualScrollRef}\n itemCount={virtualItems.length}\n getItem={(index) => virtualItems[index]}\n getItemHeight={() => ITEM_HEIGHT}\n viewportSize={viewportHeight}\n overscanCount={resolvedOverscanCount}\n onScroll={handleVirtualScroll}\n onRangeChange={handleRangeChange}\n className={virtualScrollClassName}\n background={\n <>\n {treeLineBackground}\n {virtualScrollBackground}\n </>\n }\n initialScrollIndex={initialScrollIndex}\n initialScrollOffset={initialScrollOffset}\n tapScrollCircleOptions={tapScrollCircleOptions}\n scrollBarWidth={scrollBarWidth}\n enableThumbDrag={enableThumbDrag}\n enableTrackClick={enableTrackClick}\n enableArrowButtons={enableArrowButtons}\n enablePointerDrag={enablePointerDrag}\n inertiaOptions={inertiaOptions}>\n {(item, _index) => {\n if (!item) {\n return null // item が undefined の場合は何もレンダリングしない\n }\n const { entry, indentLevel, parentIsLast } = item\n return (\n <DirectoryEntryItem\n key={entry.absolutePath}\n entry={entry}\n indentLevel={indentLevel}\n isDirOpen={safeIsExpanded}\n onFileSelect={onFileSelect}\n toggleDirectory={toggle}\n onToggleDirectoryRecursive={handleDirectoryDoubleClick}\n selectedPath={selectedPath}\n parentIsLast={parentIsLast}\n renderChildren={false}\n selectionMode={selectionMode}\n selectedItems={selectedItems}\n onSelectionChange={onSelectionChange}\n />\n )\n }}\n </VirtualScrollExtended>\n </div>\n )\n}\n\n// スタイル関連のオブジェクトと関数を export\nexport { directoryTreeClasses, getEntryClasses, getExpandIconClasses, getNameClasses, getTypeIconClasses }\n","import { useCallback, useEffect, useState, useTransition } from \"react\"\nimport type { DirectoryTreeState, UseDirectoryTreeStateProps } from \"./types\"\n\n/**\n * A React hook for managing the state of a directory tree.\n * ディレクトリツリーの状態を管理するための React フック。\n *\n * This hook is designed to work with Server-Side Rendering (SSR) by allowing\n * the initial expansion state to be passed in as a prop.\n * このフックは、初期の展開状態をプロパティとして渡すことで、\n * サーバーサイドレンダリング (SSR) と連携するように設計されています。\n *\n * @param props - The properties for the hook.\n * @returns The state and actions for the directory tree.\n */\nexport const useDirectoryTreeState = ({\n initialExpanded = new Set<string>(),\n storageKey\n}: UseDirectoryTreeStateProps = {}): DirectoryTreeState => {\n const [isPending, startTransition] = useTransition()\n const [expanded, setExpanded] = useState(() => {\n if (typeof window !== \"undefined\" && storageKey) {\n try {\n const item = window.localStorage.getItem(storageKey)\n if (item) {\n const parsedItem = JSON.parse(item)\n return new Set<string>(parsedItem)\n }\n } catch (error) {\n console.error(\"[useDirectoryTreeState] Error reading from localStorage\", error)\n }\n }\n return initialExpanded\n })\n\n useEffect(() => {\n if (storageKey && typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(Array.from(expanded)))\n } catch (error) {\n console.warn(`Error setting localStorage key \"${storageKey}\":`, error)\n }\n }\n }, [expanded, storageKey])\n\n const toggle = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(path)) {\n next.delete(path)\n } else {\n next.add(path)\n }\n return next\n })\n })\n }, [])\n\n const expand = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (!next.has(path)) {\n next.add(path)\n }\n return next\n })\n })\n }, [])\n\n const collapse = useCallback((path: string) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(path)) {\n next.delete(path)\n }\n return next\n })\n })\n }, [])\n\n const collapseMultiple = useCallback((paths: string[]) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n for (const path of paths) {\n if (next.has(path)) {\n next.delete(path)\n }\n }\n return next\n })\n })\n }, [])\n\n const expandMultiple = useCallback((paths: string[]) => {\n startTransition(() => {\n setExpanded((prev) => {\n const next = new Set(prev)\n for (const path of paths) {\n if (!next.has(path)) {\n next.add(path)\n }\n }\n return next\n })\n })\n }, [])\n\n const collapseAll = useCallback(() => {\n startTransition(() => {\n setExpanded(new Set())\n })\n }, [])\n\n const isExpanded = useCallback((path: string) => expanded.has(path), [expanded])\n\n return {\n expanded,\n toggle,\n expand,\n collapse,\n collapseMultiple,\n expandMultiple,\n collapseAll,\n isExpanded,\n isPending,\n }\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","TreeLine","items","itemHeight","width","segmentWidth","color","strokeWidth","renderFromY","renderHeight","renderStartIndex","renderEndIndex","lookaheadEndIndex","paths","effectiveRenderHeight","computedStartIndex","defaultEndExclusive","computedEndExclusive","endInclusive","lookaheadExclusive","candidate","itemIndex","item","yBase","yCenter","i","x","drawVerticalLine","connectorXBase","connectorX","iconSpace","svgHeight","jsxs","jsx","index","directoryTreeClasses","twMerge","scrollbarHideStyle","applyWebkitScrollbarHide","styleElement","getEntryClasses","isHovered","isSelected","isItemSelected","getExpandIconClasses","getTypeIconClasses","getNameClasses","isDirectory","VirtualScrollExtended","VirtualScroll","getFileExtension","filename","DirectoryEntryItem","memo","entry","indentLevel","isDirOpen","onFileSelect","toggleDirectory","onToggleDirectoryRecursive","selectedPath","parentIsLast","renderChildren","selectionMode","selectedItems","onSelectionChange","clickTimer","useRef","childrenToRender","setChildrenToRender","useState","useEffect","isExpanded","handleInteraction","useCallback","e","setIsHovered","entryClasses","expandIconClasses","typeIconClasses","nameClasses","Fragment","INDENT_SIZE","ITEM_HEIGHT","ChevronDownIcon","ChevronRightIcon","FolderIcon","DocumentTextIcon","FileIcon","child","prevProps","nextProps","prevIsDirectory","nextIsDirectory","prevIsExpanded","nextIsExpanded","getAllDescendantPaths","getFlattenEntries","entries","isLastChild","currentParentIsLast","currentEntry","DirectoryTree","className","style","toggle","expandMultiple","collapseMultiple","isPending","doubleClickAction","lineColor","virtualScrollOptions","isClient","setIsClient","containerRef","virtualScrollRef","viewportHeight","setViewportHeight","renderingRange","setRenderingRange","userOverscanCount","virtualScrollClassName","virtualScrollBackground","virtualScrollOnScroll","virtualScrollOnRangeChange","initialScrollIndex","initialScrollOffset","tapScrollCircleOptions","scrollBarWidth","enableThumbDrag","enableTrackClick","enableArrowButtons","enablePointerDrag","inertiaOptions","initialScrollPosition","scrollPosition","setScrollPosition","resolvedOverscanCount","handleVirtualScroll","position","totalHeight","handleRangeChange","renderingStartIndex","renderingEndIndex","visibleStartIndex","visibleEndIndex","previous","resizeObserver","safeIsExpanded","path","containerClasses","handleDirectoryDoubleClick","overrideDoubleClickAction","descendantPaths","allPaths","action","allLineItems","useMemo","collectItems","currentEntries","level","parentIsLastChain","isDir","currentFullPath","isCurrentlyExpanded","lineItem","virtualItems","treeLineWidth","maxIndent","treeLineBackground","fallbackSpan","fallbackEndIndex","_index","useDirectoryTreeState","initialExpanded","storageKey","startTransition","useTransition","expanded","setExpanded","parsedItem","error","prev","next","expand","collapse","collapseAll"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -45,6 +45,6 @@ declare const getNameClasses: (isDirectory?: boolean, isSelected?: boolean) => s
|
|
|
45
45
|
* @param {DirectoryTreeProps} props - The props for the component.
|
|
46
46
|
* @returns {JSX.Element} The DirectoryTree component.
|
|
47
47
|
*/
|
|
48
|
-
export declare const DirectoryTree: ({ entries, onFileSelect, className, style, selectedPath, toggle, isExpanded, expandMultiple, collapseMultiple, isPending, doubleClickAction, selectionMode, selectedItems, onSelectionChange, lineColor, virtualScrollOptions }: DirectoryTreeProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
-
export { directoryTreeClasses, getEntryClasses, getExpandIconClasses,
|
|
48
|
+
export declare const DirectoryTree: ({ entries, onFileSelect, className, style, selectedPath, toggle, isExpanded, expandMultiple, collapseMultiple, isPending, doubleClickAction, selectionMode, selectedItems, onSelectionChange, lineColor, virtualScrollOptions, }: DirectoryTreeProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export { directoryTreeClasses, getEntryClasses, getExpandIconClasses, getNameClasses, getTypeIconClasses };
|
|
50
50
|
//# sourceMappingURL=DirectoryTree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectoryTree.d.ts","sourceRoot":"","sources":["../../src/DirectoryTree.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DirectoryTree.d.ts","sourceRoot":"","sources":["../../src/DirectoryTree.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAA2C,kBAAkB,EAAuD,MAAM,YAAY,CAAA;AAElJ;;;GAGG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;CA8BzB,CAAA;AA2BD;;;GAGG;AACH,QAAA,MAAM,eAAe,GAAI,YAAW,OAAe,EAAE,aAAY,OAAe,EAAE,iBAAgB,OAAe,KAAG,MAEnH,CAAA;AAED;;;GAGG;AACH,QAAA,MAAM,oBAAoB,GAAI,aAAY,OAAe,KAAG,MAE3D,CAAA;AAED;;;GAGG;AACH,QAAA,MAAM,kBAAkB,GAAI,aAAY,OAAe,KAAG,MAEzD,CAAA;AAED;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAI,cAAa,OAAe,EAAE,aAAY,OAAe,KAAG,MAEnF,CAAA;AAoQD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,kOAiB3B,kBAAkB,4CA8PpB,CAAA;AAGD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
|
package/package.json
CHANGED