akfatimeline 1.2.0 → 2.0.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/Timeline.js +16 -48
- package/{src/components/Timeline/DailyView.js → dist/components/Timeline/DailyView.jsx} +1 -0
- package/{src/components/Timeline/EventTooltip.js → dist/components/Timeline/EventTooltip.jsx} +207 -206
- package/{src/components/Timeline/Indicator.js → dist/components/Timeline/Indicator.jsx} +27 -26
- package/{src/components/Timeline/MasterHeader.js → dist/components/Timeline/MasterHeader.jsx} +105 -104
- package/{src/components/Timeline/Resources.js → dist/components/Timeline/Resources.jsx} +54 -53
- package/{src/components/Timeline/ResourcesHeader.js → dist/components/Timeline/ResourcesHeader.jsx} +15 -14
- package/{src/components/Timeline/Timeline.js → dist/components/Timeline/Timeline.jsx} +572 -607
- package/{src/components/Timeline/TimelineContent.js → dist/components/Timeline/TimelineContent.jsx} +837 -838
- package/{src/components/Timeline/TimelineHeader.js → dist/components/Timeline/TimelineHeader.jsx} +55 -54
- package/dist/components/Timeline/TimelineMonthContainer.js +2 -2
- package/package.json +25 -25
- package/src/components/Timeline/AutocompleteSelect.jsx +150 -0
- package/src/components/Timeline/ContextMenu.jsx +149 -0
- package/src/components/Timeline/DailyView.jsx +256 -0
- package/src/components/Timeline/EventBadge.jsx +26 -0
- package/src/components/Timeline/EventDetailModal.jsx +138 -0
- package/src/components/Timeline/EventIcon.jsx +47 -0
- package/src/components/Timeline/EventTooltip.jsx +207 -0
- package/src/components/Timeline/Indicator.jsx +27 -0
- package/src/components/Timeline/LoadingSpinner.jsx +48 -0
- package/src/components/Timeline/MasterHeader.jsx +105 -0
- package/src/components/Timeline/Resources.jsx +54 -0
- package/src/components/Timeline/ResourcesHeader.jsx +15 -0
- package/src/components/Timeline/Timeline.jsx +572 -0
- package/src/components/Timeline/TimelineContent.jsx +837 -0
- package/src/components/Timeline/TimelineHeader.jsx +55 -0
- package/src/components/Timeline/TimelineMonthContainer.js +2 -2
- package/src/library.js +8 -8
- /package/{src/components/Timeline/AutocompleteSelect.js → dist/components/Timeline/AutocompleteSelect.jsx} +0 -0
- /package/{src/components/Timeline/ContextMenu.js → dist/components/Timeline/ContextMenu.jsx} +0 -0
- /package/{src/components/Timeline/EventBadge.js → dist/components/Timeline/EventBadge.jsx} +0 -0
- /package/{src/components/Timeline/EventDetailModal.js → dist/components/Timeline/EventDetailModal.jsx} +0 -0
- /package/{src/components/Timeline/EventIcon.js → dist/components/Timeline/EventIcon.jsx} +0 -0
- /package/{src/components/Timeline/LoadingSpinner.js → dist/components/Timeline/LoadingSpinner.jsx} +0 -0
package/{src/components/Timeline/MasterHeader.js → dist/components/Timeline/MasterHeader.jsx}
RENAMED
|
@@ -1,104 +1,105 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import "./Timeline.css";
|
|
3
|
-
|
|
4
|
-
const MasterHeader = ({
|
|
5
|
-
selectedDate,
|
|
6
|
-
onDateSelect,
|
|
7
|
-
onToday,
|
|
8
|
-
onAdvance,
|
|
9
|
-
onRetreat,
|
|
10
|
-
onMonthAdvance,
|
|
11
|
-
onMonthRetreat,
|
|
12
|
-
dayRange,
|
|
13
|
-
setDayRange,
|
|
14
|
-
zoomLevel = 1.0,
|
|
15
|
-
setZoomLevel,
|
|
16
|
-
zoomOn = true,
|
|
17
|
-
minZoomLevel = 0.5,
|
|
18
|
-
maxZoomLevel = 3.0,
|
|
19
|
-
zoomStep = 0.25,
|
|
20
|
-
}) => {
|
|
21
|
-
const formattedDate = new Date(
|
|
22
|
-
selectedDate.getTime() + 24 * 60 * 60 * 1000 - selectedDate.getTimezoneOffset() * 60000
|
|
23
|
-
)
|
|
24
|
-
.toISOString()
|
|
25
|
-
.split("T")[0]; // YYYY-MM-DD formatı
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<div className="master-header-container">
|
|
29
|
-
<div className="master-header-buttons">
|
|
30
|
-
<button className="master-header-btn" onClick={onMonthRetreat}>
|
|
31
|
-
1 Ay Geri
|
|
32
|
-
</button>
|
|
33
|
-
|
|
34
|
-
<button className="master-header-btn" onClick={onRetreat}>
|
|
35
|
-
5 Gün Geri
|
|
36
|
-
</button>
|
|
37
|
-
|
|
38
|
-
<input
|
|
39
|
-
type="date"
|
|
40
|
-
className="master-header-date-picker"
|
|
41
|
-
value={formattedDate} // Seçili tarih burada gösteriliyor
|
|
42
|
-
onChange={(e) => onDateSelect(e.target.value)} // Tarih seçimi
|
|
43
|
-
onKeyDown={(e) => e.preventDefault()} // Manuel girişleri engelle
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
<button className="master-header-btn" onClick={onAdvance}>
|
|
48
|
-
5 Gün İleri
|
|
49
|
-
</button>
|
|
50
|
-
|
|
51
|
-
<button className="master-header-btn" onClick={onMonthAdvance}>
|
|
52
|
-
1 Ay İleri
|
|
53
|
-
</button>
|
|
54
|
-
|
|
55
|
-
<button className="master-header-btn" onClick={onToday}>
|
|
56
|
-
Bugün
|
|
57
|
-
</button>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<select
|
|
61
|
-
className="master-header-select"
|
|
62
|
-
value={dayRange}
|
|
63
|
-
onChange={(e) => setDayRange(parseInt(e.target.value, 10))}
|
|
64
|
-
>
|
|
65
|
-
<option value={30}>30 Gün</option>
|
|
66
|
-
<option value={60}>60 Gün</option>
|
|
67
|
-
<option value={90}>90 Gün</option>
|
|
68
|
-
</select>
|
|
69
|
-
|
|
70
|
-
{/* Zoom Kontrolleri */}
|
|
71
|
-
{zoomOn && setZoomLevel && (
|
|
72
|
-
<div className="master-header-zoom-controls">
|
|
73
|
-
<button
|
|
74
|
-
className="master-header-btn"
|
|
75
|
-
onClick={() => {
|
|
76
|
-
const newZoom = Math.max(minZoomLevel, zoomLevel - zoomStep);
|
|
77
|
-
setZoomLevel(newZoom);
|
|
78
|
-
}}
|
|
79
|
-
disabled={zoomLevel <= minZoomLevel}
|
|
80
|
-
title={`Zoom Out (${Math.round((zoomLevel - zoomStep) * 100)}%)`}
|
|
81
|
-
>
|
|
82
|
-
−
|
|
83
|
-
</button>
|
|
84
|
-
<span className="master-header-zoom-level">
|
|
85
|
-
{Math.round(zoomLevel * 100)}%
|
|
86
|
-
</span>
|
|
87
|
-
<button
|
|
88
|
-
className="master-header-btn"
|
|
89
|
-
onClick={() => {
|
|
90
|
-
const newZoom = Math.min(maxZoomLevel, zoomLevel + zoomStep);
|
|
91
|
-
setZoomLevel(newZoom);
|
|
92
|
-
}}
|
|
93
|
-
disabled={zoomLevel >= maxZoomLevel}
|
|
94
|
-
title={`Zoom In (${Math.round((zoomLevel + zoomStep) * 100)}%)`}
|
|
95
|
-
>
|
|
96
|
-
+
|
|
97
|
-
</button>
|
|
98
|
-
</div>
|
|
99
|
-
)}
|
|
100
|
-
</div>
|
|
101
|
-
);
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
export default MasterHeader;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import "./Timeline.css";
|
|
3
|
+
|
|
4
|
+
const MasterHeader = ({
|
|
5
|
+
selectedDate,
|
|
6
|
+
onDateSelect,
|
|
7
|
+
onToday,
|
|
8
|
+
onAdvance,
|
|
9
|
+
onRetreat,
|
|
10
|
+
onMonthAdvance,
|
|
11
|
+
onMonthRetreat,
|
|
12
|
+
dayRange,
|
|
13
|
+
setDayRange,
|
|
14
|
+
zoomLevel = 1.0,
|
|
15
|
+
setZoomLevel,
|
|
16
|
+
zoomOn = true,
|
|
17
|
+
minZoomLevel = 0.5,
|
|
18
|
+
maxZoomLevel = 3.0,
|
|
19
|
+
zoomStep = 0.25,
|
|
20
|
+
}) => {
|
|
21
|
+
const formattedDate = new Date(
|
|
22
|
+
selectedDate.getTime() + 24 * 60 * 60 * 1000 - selectedDate.getTimezoneOffset() * 60000
|
|
23
|
+
)
|
|
24
|
+
.toISOString()
|
|
25
|
+
.split("T")[0]; // YYYY-MM-DD formatı
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div className="master-header-container">
|
|
29
|
+
<div className="master-header-buttons">
|
|
30
|
+
<button className="master-header-btn" onClick={onMonthRetreat}>
|
|
31
|
+
1 Ay Geri
|
|
32
|
+
</button>
|
|
33
|
+
|
|
34
|
+
<button className="master-header-btn" onClick={onRetreat}>
|
|
35
|
+
5 Gün Geri
|
|
36
|
+
</button>
|
|
37
|
+
|
|
38
|
+
<input
|
|
39
|
+
type="date"
|
|
40
|
+
className="master-header-date-picker"
|
|
41
|
+
value={formattedDate} // Seçili tarih burada gösteriliyor
|
|
42
|
+
onChange={(e) => onDateSelect(e.target.value)} // Tarih seçimi
|
|
43
|
+
onKeyDown={(e) => e.preventDefault()} // Manuel girişleri engelle
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
<button className="master-header-btn" onClick={onAdvance}>
|
|
48
|
+
5 Gün İleri
|
|
49
|
+
</button>
|
|
50
|
+
|
|
51
|
+
<button className="master-header-btn" onClick={onMonthAdvance}>
|
|
52
|
+
1 Ay İleri
|
|
53
|
+
</button>
|
|
54
|
+
|
|
55
|
+
<button className="master-header-btn" onClick={onToday}>
|
|
56
|
+
Bugün
|
|
57
|
+
</button>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<select
|
|
61
|
+
className="master-header-select"
|
|
62
|
+
value={dayRange}
|
|
63
|
+
onChange={(e) => setDayRange(parseInt(e.target.value, 10))}
|
|
64
|
+
>
|
|
65
|
+
<option value={30}>30 Gün</option>
|
|
66
|
+
<option value={60}>60 Gün</option>
|
|
67
|
+
<option value={90}>90 Gün</option>
|
|
68
|
+
</select>
|
|
69
|
+
|
|
70
|
+
{/* Zoom Kontrolleri */}
|
|
71
|
+
{zoomOn && setZoomLevel && (
|
|
72
|
+
<div className="master-header-zoom-controls">
|
|
73
|
+
<button
|
|
74
|
+
className="master-header-btn"
|
|
75
|
+
onClick={() => {
|
|
76
|
+
const newZoom = Math.max(minZoomLevel, zoomLevel - zoomStep);
|
|
77
|
+
setZoomLevel(newZoom);
|
|
78
|
+
}}
|
|
79
|
+
disabled={zoomLevel <= minZoomLevel}
|
|
80
|
+
title={`Zoom Out (${Math.round((zoomLevel - zoomStep) * 100)}%)`}
|
|
81
|
+
>
|
|
82
|
+
−
|
|
83
|
+
</button>
|
|
84
|
+
<span className="master-header-zoom-level">
|
|
85
|
+
{Math.round(zoomLevel * 100)}%
|
|
86
|
+
</span>
|
|
87
|
+
<button
|
|
88
|
+
className="master-header-btn"
|
|
89
|
+
onClick={() => {
|
|
90
|
+
const newZoom = Math.min(maxZoomLevel, zoomLevel + zoomStep);
|
|
91
|
+
setZoomLevel(newZoom);
|
|
92
|
+
}}
|
|
93
|
+
disabled={zoomLevel >= maxZoomLevel}
|
|
94
|
+
title={`Zoom In (${Math.round((zoomLevel + zoomStep) * 100)}%)`}
|
|
95
|
+
>
|
|
96
|
+
+
|
|
97
|
+
</button>
|
|
98
|
+
</div>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export default MasterHeader;
|
|
105
|
+
|
|
@@ -1,53 +1,54 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
const Resources = ({
|
|
4
|
-
groupedResources = [], // Kaynakların listesi
|
|
5
|
-
collapsedGroups = {}, // Grupların açık/kapalı durumunu tutan nesne
|
|
6
|
-
toggleGroupCollapse, // Grupları açma/kapama fonksiyonu
|
|
7
|
-
resourceSettings = {
|
|
8
|
-
showIdAsName: false, // Varsayılan: `name` varsa onu göster, yoksa `id`
|
|
9
|
-
isGrouped: true, // Varsayılan: Gruplama açık
|
|
10
|
-
isCollapsible: true, // Varsayılan: Gruplar açılıp kapanabilir
|
|
11
|
-
},
|
|
12
|
-
}) => {
|
|
13
|
-
const { showIdAsName, isGrouped, isCollapsible } = resourceSettings;
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div className="timeline-resources">
|
|
17
|
-
{isGrouped ? (
|
|
18
|
-
// Gruplama aktif
|
|
19
|
-
groupedResources.map((group, groupIndex) => (
|
|
20
|
-
<div key={groupIndex} className="resource-group">
|
|
21
|
-
{/* Grup Başlığı */}
|
|
22
|
-
<div
|
|
23
|
-
className="resource-group-header"
|
|
24
|
-
onClick={() => isCollapsible && toggleGroupCollapse(group.groupName)}
|
|
25
|
-
>
|
|
26
|
-
{group.groupName}{" "}
|
|
27
|
-
{isCollapsible && (collapsedGroups[group.groupName] ? "▲" : "▼")}
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
{/* Grup İçindeki Kaynaklar */}
|
|
31
|
-
{!collapsedGroups[group.groupName] &&
|
|
32
|
-
group.resources.map((resource, resourceIndex) => (
|
|
33
|
-
<div key={resourceIndex} className="resource-cell">
|
|
34
|
-
{showIdAsName ? resource.id : resource.name || resource.id}
|
|
35
|
-
{/* Eğer `name` yoksa `id` kullanılır */}
|
|
36
|
-
</div>
|
|
37
|
-
))}
|
|
38
|
-
</div>
|
|
39
|
-
))
|
|
40
|
-
) : (
|
|
41
|
-
// Gruplama yok
|
|
42
|
-
groupedResources.flatMap((group) => group.resources).map((resource, resourceIndex) => (
|
|
43
|
-
<div key={resourceIndex} className="resource-cell">
|
|
44
|
-
{showIdAsName ? resource.id : resource.name || resource.id}
|
|
45
|
-
{/* Eğer `name` yoksa `id` kullanılır */}
|
|
46
|
-
</div>
|
|
47
|
-
))
|
|
48
|
-
)}
|
|
49
|
-
</div>
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export default Resources;
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
const Resources = ({
|
|
4
|
+
groupedResources = [], // Kaynakların listesi
|
|
5
|
+
collapsedGroups = {}, // Grupların açık/kapalı durumunu tutan nesne
|
|
6
|
+
toggleGroupCollapse, // Grupları açma/kapama fonksiyonu
|
|
7
|
+
resourceSettings = {
|
|
8
|
+
showIdAsName: false, // Varsayılan: `name` varsa onu göster, yoksa `id`
|
|
9
|
+
isGrouped: true, // Varsayılan: Gruplama açık
|
|
10
|
+
isCollapsible: true, // Varsayılan: Gruplar açılıp kapanabilir
|
|
11
|
+
},
|
|
12
|
+
}) => {
|
|
13
|
+
const { showIdAsName, isGrouped, isCollapsible } = resourceSettings;
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className="timeline-resources">
|
|
17
|
+
{isGrouped ? (
|
|
18
|
+
// Gruplama aktif
|
|
19
|
+
groupedResources.map((group, groupIndex) => (
|
|
20
|
+
<div key={groupIndex} className="resource-group">
|
|
21
|
+
{/* Grup Başlığı */}
|
|
22
|
+
<div
|
|
23
|
+
className="resource-group-header"
|
|
24
|
+
onClick={() => isCollapsible && toggleGroupCollapse(group.groupName)}
|
|
25
|
+
>
|
|
26
|
+
{group.groupName}{" "}
|
|
27
|
+
{isCollapsible && (collapsedGroups[group.groupName] ? "▲" : "▼")}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
{/* Grup İçindeki Kaynaklar */}
|
|
31
|
+
{!collapsedGroups[group.groupName] &&
|
|
32
|
+
group.resources.map((resource, resourceIndex) => (
|
|
33
|
+
<div key={resourceIndex} className="resource-cell">
|
|
34
|
+
{showIdAsName ? resource.id : resource.name || resource.id}
|
|
35
|
+
{/* Eğer `name` yoksa `id` kullanılır */}
|
|
36
|
+
</div>
|
|
37
|
+
))}
|
|
38
|
+
</div>
|
|
39
|
+
))
|
|
40
|
+
) : (
|
|
41
|
+
// Gruplama yok
|
|
42
|
+
groupedResources.flatMap((group) => group.resources).map((resource, resourceIndex) => (
|
|
43
|
+
<div key={resourceIndex} className="resource-cell">
|
|
44
|
+
{showIdAsName ? resource.id : resource.name || resource.id}
|
|
45
|
+
{/* Eğer `name` yoksa `id` kullanılır */}
|
|
46
|
+
</div>
|
|
47
|
+
))
|
|
48
|
+
)}
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default Resources;
|
|
54
|
+
|
package/{src/components/Timeline/ResourcesHeader.js → dist/components/Timeline/ResourcesHeader.jsx}
RENAMED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
// ResourcesHeader.
|
|
2
|
-
import React from "react";
|
|
3
|
-
import "./Timeline.css";
|
|
4
|
-
|
|
5
|
-
const ResourcesHeader = ({ content }) => {
|
|
6
|
-
return (
|
|
7
|
-
<div className="resources-header">
|
|
8
|
-
{/* content => string veya React node */}
|
|
9
|
-
{content}
|
|
10
|
-
</div>
|
|
11
|
-
);
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default ResourcesHeader;
|
|
1
|
+
// ResourcesHeader.jsx
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./Timeline.css";
|
|
4
|
+
|
|
5
|
+
const ResourcesHeader = ({ content }) => {
|
|
6
|
+
return (
|
|
7
|
+
<div className="resources-header">
|
|
8
|
+
{/* content => string veya React node */}
|
|
9
|
+
{content}
|
|
10
|
+
</div>
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default ResourcesHeader;
|
|
15
|
+
|