@skspwork/config-doc 2.0.4 → 2.0.5

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.
Files changed (78) hide show
  1. package/package.json +2 -2
  2. package/packages/web/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  3. package/packages/web/.next/standalone/.next/server/app/_not-found.html +1 -1
  4. package/packages/web/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  5. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  6. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  7. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  8. package/packages/web/.next/standalone/.next/server/app/api/config/save/route.js +1 -1
  9. package/packages/web/.next/standalone/.next/server/app/api/config/save/route.js.nft.json +1 -1
  10. package/packages/web/.next/standalone/.next/server/app/api/export/route.js +3 -3
  11. package/packages/web/.next/standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  12. package/packages/web/.next/standalone/.next/server/app/index.html +1 -1
  13. package/packages/web/.next/standalone/.next/server/app/index.rsc +3 -3
  14. package/packages/web/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  15. package/packages/web/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  16. package/packages/web/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  17. package/packages/web/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  18. package/packages/web/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  19. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__40e87302._.js +3 -0
  20. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__93da9fce._.js +1 -1
  21. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__c9655ac8._.js +3 -0
  22. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__e19366f6._.js +1 -1
  23. package/packages/web/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_d09de205.js +345 -27
  24. package/packages/web/.next/standalone/.next/server/chunks/ssr/app_page_tsx_55b2e5ee._.js +1 -1
  25. package/packages/web/.next/standalone/.next/server/pages/404.html +1 -1
  26. package/packages/web/.next/standalone/.next/static/chunks/02de70e4c30afe2f.js +1 -0
  27. package/packages/web/.next/standalone/.next/static/chunks/862e384b52cfebf3.css +3 -0
  28. package/packages/web/.next/standalone/app/api/config/metadata/route.ts +5 -3
  29. package/packages/web/.next/standalone/playwright-report/index.html +1 -1
  30. package/packages/web/.next/static/chunks/02de70e4c30afe2f.js +1 -0
  31. package/packages/web/.next/static/chunks/862e384b52cfebf3.css +3 -0
  32. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__1a68b1f3._.js +0 -3
  33. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__2c94dfea._.js +0 -3
  34. package/packages/web/.next/standalone/.next/static/chunks/9726c2cde77e0916.js +0 -1
  35. package/packages/web/.next/standalone/.next/static/chunks/cd878566fda12635.css +0 -3
  36. package/packages/web/.next/standalone/app/api/config/load/route.ts +0 -57
  37. package/packages/web/.next/standalone/app/api/config/save/route.ts +0 -73
  38. package/packages/web/.next/standalone/app/api/export/route.ts +0 -75
  39. package/packages/web/.next/standalone/app/api/export/settings/route.ts +0 -144
  40. package/packages/web/.next/standalone/app/api/files/browse/route.ts +0 -46
  41. package/packages/web/.next/standalone/app/api/project/route.ts +0 -41
  42. package/packages/web/.next/standalone/app/globals.css +0 -26
  43. package/packages/web/.next/standalone/app/icon.svg +0 -41
  44. package/packages/web/.next/standalone/app/layout.tsx +0 -34
  45. package/packages/web/.next/standalone/app/page.tsx +0 -135
  46. package/packages/web/.next/standalone/components/ConfigFileTabs.tsx +0 -188
  47. package/packages/web/.next/standalone/components/ConfigTree.tsx +0 -176
  48. package/packages/web/.next/standalone/components/EditableList.tsx +0 -337
  49. package/packages/web/.next/standalone/components/ExportDialog.tsx +0 -234
  50. package/packages/web/.next/standalone/components/FieldsEditor.tsx +0 -92
  51. package/packages/web/.next/standalone/components/FileBrowser.tsx +0 -290
  52. package/packages/web/.next/standalone/components/Header.tsx +0 -37
  53. package/packages/web/.next/standalone/components/PropertyEditor.tsx +0 -102
  54. package/packages/web/.next/standalone/components/TagEditor.tsx +0 -86
  55. package/packages/web/.next/standalone/components/Toast.tsx +0 -91
  56. package/packages/web/.next/standalone/eslint.config.mjs +0 -18
  57. package/packages/web/.next/standalone/hooks/useConfigManager.ts +0 -653
  58. package/packages/web/.next/standalone/lib/configManagerUtils.ts +0 -84
  59. package/packages/web/.next/standalone/lib/configParser.ts +0 -155
  60. package/packages/web/.next/standalone/lib/fileSystem.ts +0 -186
  61. package/packages/web/.next/standalone/lib/getRootPath.ts +0 -45
  62. package/packages/web/.next/standalone/lib/htmlGenerator.ts +0 -865
  63. package/packages/web/.next/standalone/lib/jsonUtils.ts +0 -26
  64. package/packages/web/.next/standalone/lib/markdownGenerator.ts +0 -110
  65. package/packages/web/.next/standalone/lib/markdownTableGenerator.ts +0 -103
  66. package/packages/web/.next/standalone/lib/storage.ts +0 -104
  67. package/packages/web/.next/standalone/lib/utils.ts +0 -89
  68. package/packages/web/.next/standalone/next.config.ts +0 -10
  69. package/packages/web/.next/standalone/package-lock.json +0 -8216
  70. package/packages/web/.next/standalone/playwright.config.ts +0 -27
  71. package/packages/web/.next/standalone/postcss.config.mjs +0 -7
  72. package/packages/web/.next/standalone/test-results/.last-run.json +0 -4
  73. package/packages/web/.next/standalone/tsconfig.json +0 -34
  74. package/packages/web/.next/standalone/tsconfig.tsbuildinfo +0 -1
  75. package/packages/web/.next/standalone/types/index.ts +0 -74
  76. package/packages/web/.next/standalone/vitest.config.ts +0 -14
  77. package/packages/web/.next/static/chunks/9726c2cde77e0916.js +0 -1
  78. package/packages/web/.next/static/chunks/cd878566fda12635.css +0 -3
@@ -1,102 +0,0 @@
1
- 'use client';
2
-
3
- import { SaveIcon, FileTextIcon } from 'lucide-react';
4
- import { PropertyDoc } from '@/types';
5
- import { TagEditor } from '@/components/TagEditor';
6
- import { FieldsEditor } from '@/components/FieldsEditor';
7
-
8
- interface PropertyEditorProps {
9
- selectedPath: string;
10
- editingDoc: PropertyDoc | null;
11
- hasUnsavedChanges: boolean;
12
- availableTags: string[];
13
- projectFields: Record<string, string>;
14
- onEditingDocChange: (doc: PropertyDoc) => void;
15
- onAvailableTagsChange: (tags: string[]) => void;
16
- onProjectFieldsChange: (fields: Record<string, string>) => void;
17
- onSave: () => void;
18
- }
19
-
20
- export function PropertyEditor({
21
- selectedPath,
22
- editingDoc,
23
- hasUnsavedChanges,
24
- availableTags,
25
- projectFields,
26
- onEditingDocChange,
27
- onAvailableTagsChange,
28
- onProjectFieldsChange,
29
- onSave
30
- }: PropertyEditorProps) {
31
- return (
32
- <div className="bg-white/90 backdrop-blur-sm rounded-2xl shadow-xl border border-gray-100 p-6 flex flex-col max-h-[calc(100vh-190px)] hover:shadow-2xl transition-shadow duration-300">
33
- <div className="flex items-center gap-2 mb-4">
34
- <div className="w-8 h-8 bg-gradient-to-br from-indigo-500 to-indigo-600 rounded-lg flex items-center justify-center">
35
- <SaveIcon className="w-5 h-5 text-white" />
36
- </div>
37
- <h2 className="text-xl font-bold text-gray-800">プロパティ詳細</h2>
38
- </div>
39
-
40
- {selectedPath && editingDoc ? (
41
- <div className="flex flex-col flex-1 min-h-0">
42
- {/* パス(上部固定) */}
43
- <div className="flex-shrink-0 pb-4 border-b border-gray-200">
44
- <label className="block text-sm font-semibold text-gray-700 mb-2">
45
- パス
46
- </label>
47
- <div className="text-sm text-gray-700 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 rounded-lg font-mono border border-blue-200 shadow-sm">
48
- {selectedPath}
49
- </div>
50
- </div>
51
-
52
- {/* スクロール可能なフォーム部分 */}
53
- <div className="flex-1 overflow-y-auto py-4 space-y-6 min-h-0">
54
- {/* タグ */}
55
- <TagEditor
56
- selectedTags={editingDoc.tags || []}
57
- availableTags={availableTags}
58
- onSelectedTagsChange={(tags) => {
59
- onEditingDocChange({ ...editingDoc, tags });
60
- }}
61
- onAvailableTagsChange={onAvailableTagsChange}
62
- />
63
-
64
- {/* フィールド */}
65
- <FieldsEditor
66
- fields={editingDoc.fields || {}}
67
- projectFields={projectFields}
68
- onFieldsChange={(fields) => {
69
- onEditingDocChange({ ...editingDoc, fields });
70
- }}
71
- onUpdateProjectFields={onProjectFieldsChange}
72
- />
73
- </div>
74
-
75
- {/* 保存ボタン(下部固定) */}
76
- <div className="flex-shrink-0 pt-4 border-t border-gray-200">
77
- <button
78
- onClick={onSave}
79
- disabled={!hasUnsavedChanges}
80
- className={`w-full flex items-center justify-center gap-2 px-4 py-3 rounded-lg shadow-md transition-all duration-200 transform ${
81
- hasUnsavedChanges
82
- ? 'bg-gradient-to-r from-green-500 to-emerald-600 text-white hover:from-green-600 hover:to-emerald-700 hover:shadow-lg cursor-pointer'
83
- : 'bg-gray-300 text-gray-500 cursor-not-allowed'
84
- }`}
85
- >
86
- <SaveIcon className="w-5 h-5" />
87
- <span className="font-medium">保存</span>
88
- </button>
89
- </div>
90
- </div>
91
- ) : (
92
- <div className="flex flex-col items-center justify-center flex-1">
93
- <div className="w-20 h-20 bg-gradient-to-br from-gray-100 to-gray-200 rounded-full flex items-center justify-center mb-4">
94
- <FileTextIcon className="w-10 h-10 text-gray-400" />
95
- </div>
96
- <p className="text-sm text-gray-600 font-medium">プロパティを選択してください</p>
97
- <p className="text-xs text-gray-500 mt-1">左側のツリーから項目を選択</p>
98
- </div>
99
- )}
100
- </div>
101
- );
102
- }
@@ -1,86 +0,0 @@
1
- 'use client';
2
-
3
- import { CheckIcon } from 'lucide-react';
4
- import { EditableListWrapper } from './EditableList';
5
-
6
- interface TagEditorProps {
7
- selectedTags: string[];
8
- availableTags: string[];
9
- onSelectedTagsChange: (tags: string[]) => void;
10
- onAvailableTagsChange: (tags: string[]) => void;
11
- }
12
-
13
- export function TagEditor({
14
- selectedTags,
15
- availableTags,
16
- onSelectedTagsChange,
17
- onAvailableTagsChange
18
- }: TagEditorProps) {
19
- const handleToggleTag = (tag: string) => {
20
- if (selectedTags.includes(tag)) {
21
- onSelectedTagsChange(selectedTags.filter(t => t !== tag));
22
- } else {
23
- onSelectedTagsChange([...selectedTags, tag]);
24
- }
25
- };
26
-
27
- // 名前変更時に選択中のタグも更新
28
- const handleRename = (renamedMap: Record<string, string>) => {
29
- const updatedSelectedTags = selectedTags.map(tag => renamedMap[tag] || tag);
30
- if (JSON.stringify(updatedSelectedTags) !== JSON.stringify(selectedTags)) {
31
- onSelectedTagsChange(updatedSelectedTags);
32
- }
33
- };
34
-
35
- // 削除されたタグを選択から除外
36
- const handleTagsChange = (newTags: string[]) => {
37
- const updatedSelectedTags = selectedTags.filter(tag => newTags.includes(tag));
38
- if (updatedSelectedTags.length !== selectedTags.length) {
39
- onSelectedTagsChange(updatedSelectedTags);
40
- }
41
- onAvailableTagsChange(newTags);
42
- };
43
-
44
- return (
45
- <EditableListWrapper
46
- label="タグ"
47
- items={availableTags}
48
- onItemsChange={handleTagsChange}
49
- editButtonTitle="タグを編集"
50
- editModeDescription="タグの追加・削除・名前変更"
51
- inputPlaceholder="タグ名"
52
- newItemPlaceholder="新しいタグ名を入力"
53
- deleteButtonTitle="タグを削除"
54
- addButtonTitle="タグを追加"
55
- duplicateErrorMessage="同じ名前のタグがあります"
56
- onRename={handleRename}
57
- >
58
- {/* 通常モード(タグの選択) */}
59
- <div className="flex flex-wrap gap-2">
60
- {availableTags.length === 0 ? (
61
- <div className="text-sm text-gray-500">
62
- タグがありません。鉛筆アイコンをクリックして追加してください。
63
- </div>
64
- ) : (
65
- availableTags.map((tag) => {
66
- const isSelected = selectedTags.includes(tag);
67
- return (
68
- <button
69
- key={tag}
70
- onClick={() => handleToggleTag(tag)}
71
- className={`flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium border-2 transition-all duration-200 ${
72
- isSelected
73
- ? 'bg-blue-500 text-white border-blue-600 shadow-md'
74
- : 'bg-white text-gray-700 border-gray-200 hover:border-blue-300 hover:bg-blue-50'
75
- }`}
76
- >
77
- {isSelected && <CheckIcon className="w-3 h-3" />}
78
- <span>{tag}</span>
79
- </button>
80
- );
81
- })
82
- )}
83
- </div>
84
- </EditableListWrapper>
85
- );
86
- }
@@ -1,91 +0,0 @@
1
- 'use client';
2
-
3
- import { useEffect, useState } from 'react';
4
- import { CheckCircleIcon, XCircleIcon, AlertCircleIcon, XIcon } from 'lucide-react';
5
-
6
- export type ToastType = 'success' | 'error' | 'warning';
7
-
8
- interface ToastProps {
9
- message: string;
10
- type: ToastType;
11
- duration?: number;
12
- onClose: () => void;
13
- }
14
-
15
- export function Toast({ message, type, duration = 3000, onClose }: ToastProps) {
16
- const [isVisible, setIsVisible] = useState(false);
17
-
18
- useEffect(() => {
19
- // マウント時にフェードイン
20
- setTimeout(() => setIsVisible(true), 10);
21
-
22
- // duration後にフェードアウト
23
- const timer = setTimeout(() => {
24
- setIsVisible(false);
25
- setTimeout(onClose, 300); // フェードアウトアニメーション完了後にクローズ
26
- }, duration);
27
-
28
- return () => clearTimeout(timer);
29
- }, [duration, onClose]);
30
-
31
- const icons = {
32
- success: <CheckCircleIcon className="w-5 h-5 text-green-500" />,
33
- error: <XCircleIcon className="w-5 h-5 text-red-500" />,
34
- warning: <AlertCircleIcon className="w-5 h-5 text-yellow-500" />
35
- };
36
-
37
- const bgColors = {
38
- success: 'bg-green-50 border-green-200',
39
- error: 'bg-red-50 border-red-200',
40
- warning: 'bg-yellow-50 border-yellow-200'
41
- };
42
-
43
- return (
44
- <div
45
- className={`fixed bottom-4 left-4 z-50 transition-all duration-300 ${
46
- isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-2'
47
- }`}
48
- >
49
- <div
50
- className={`flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border ${bgColors[type]} min-w-[300px] max-w-[500px]`}
51
- >
52
- {icons[type]}
53
- <span className="flex-1 text-sm text-gray-800">{message}</span>
54
- <button
55
- onClick={() => {
56
- setIsVisible(false);
57
- setTimeout(onClose, 300);
58
- }}
59
- className="text-gray-400 hover:text-gray-600 transition-colors"
60
- >
61
- <XIcon className="w-4 h-4" />
62
- </button>
63
- </div>
64
- </div>
65
- );
66
- }
67
-
68
- interface ToastContainerProps {
69
- toasts: Array<{ id: string; message: string; type: ToastType }>;
70
- onRemove: (id: string) => void;
71
- }
72
-
73
- export function ToastContainer({ toasts, onRemove }: ToastContainerProps) {
74
- return (
75
- <>
76
- {toasts.map((toast, index) => (
77
- <div
78
- key={toast.id}
79
- style={{ bottom: `${16 + index * 80}px` }}
80
- className="fixed left-4 z-50"
81
- >
82
- <Toast
83
- message={toast.message}
84
- type={toast.type}
85
- onClose={() => onRemove(toast.id)}
86
- />
87
- </div>
88
- ))}
89
- </>
90
- );
91
- }
@@ -1,18 +0,0 @@
1
- import { defineConfig, globalIgnores } from "eslint/config";
2
- import nextVitals from "eslint-config-next/core-web-vitals";
3
- import nextTs from "eslint-config-next/typescript";
4
-
5
- const eslintConfig = defineConfig([
6
- ...nextVitals,
7
- ...nextTs,
8
- // Override default ignores of eslint-config-next.
9
- globalIgnores([
10
- // Default ignores of eslint-config-next:
11
- ".next/**",
12
- "out/**",
13
- "build/**",
14
- "next-env.d.ts",
15
- ]),
16
- ]);
17
-
18
- export default eslintConfig;