heatmap-builder 0.2.0 → 0.4.3
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +2 -5
- data/CHANGELOG.md +70 -3
- data/Gemfile.lock +27 -24
- data/README.md +105 -135
- data/bin/generate_examples +42 -99
- data/examples/calendar_blue_ocean.svg +1 -1
- data/examples/calendar_cell_borders.svg +1 -0
- data/examples/calendar_default.svg +1 -1
- data/examples/calendar_github_style.svg +1 -1
- data/examples/calendar_month_spacing_rounded.svg +1 -0
- data/examples/calendar_no_borders.svg +1 -0
- data/examples/calendar_purple_vibes.svg +1 -1
- data/examples/calendar_red_to_green.svg +1 -1
- data/examples/calendar_rounded_corners.svg +1 -1
- data/examples/calendar_rounded_corners_max_radius.svg +1 -1
- data/examples/calendar_sunday_start.svg +1 -1
- data/examples/calendar_warm_sunset.svg +1 -1
- data/examples/calendar_with_outside_cells.svg +1 -1
- data/heatmap-builder.gemspec +4 -4
- data/lib/heatmap-builder.rb +5 -31
- data/lib/heatmap_builder/calendar.rb +426 -0
- data/lib/heatmap_builder/color_helpers.rb +121 -141
- data/lib/heatmap_builder/svg_helpers.rb +11 -4
- data/lib/heatmap_builder/value_conversion.rb +9 -5
- data/lib/heatmap_builder/version.rb +1 -1
- metadata +13 -22
- data/examples/large_cells.svg +0 -1
- data/examples/linear_blue_ocean.svg +0 -1
- data/examples/linear_github_green.svg +0 -1
- data/examples/linear_neon_gradient.svg +0 -1
- data/examples/linear_purple_vibes.svg +0 -1
- data/examples/linear_red_to_green.svg +0 -1
- data/examples/linear_rounded_corners.svg +0 -1
- data/examples/linear_rounded_corners_max_radius.svg +0 -1
- data/examples/linear_warm_sunset.svg +0 -1
- data/examples/weekly_progress.svg +0 -1
- data/lib/heatmap_builder/builder.rb +0 -100
- data/lib/heatmap_builder/calendar_heatmap_builder.rb +0 -310
- data/lib/heatmap_builder/linear_heatmap_builder.rb +0 -74
data/bin/generate_examples
CHANGED
|
@@ -30,79 +30,11 @@ end
|
|
|
30
30
|
def generate_sample_svgs(force: false)
|
|
31
31
|
Dir.mkdir(EXAMPLES_DIR) unless Dir.exist?(EXAMPLES_DIR)
|
|
32
32
|
|
|
33
|
-
weekly_scores = [0, 1, 3, 2, 4, 1, 0]
|
|
34
|
-
generate_example("weekly_progress.svg", "basic weekly progress", force: force) do
|
|
35
|
-
HeatmapBuilder.build_linear(scores: weekly_scores, cell_size: 18)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
large_cell_scores = [1, 2, 3, 4, 5, 6, 7]
|
|
39
|
-
generate_example("large_cells.svg", "large cells example", force: force) do
|
|
40
|
-
HeatmapBuilder.build_linear(
|
|
41
|
-
scores: large_cell_scores,
|
|
42
|
-
cell_size: 35,
|
|
43
|
-
cell_spacing: 1,
|
|
44
|
-
font_size: 20
|
|
45
|
-
)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
puts "Generating linear heatmaps with different palettes..."
|
|
49
|
-
puts
|
|
50
|
-
|
|
51
|
-
linear_scores = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
52
|
-
|
|
53
|
-
generate_example("linear_github_green.svg", "linear with GitHub Green palette", force: force) do
|
|
54
|
-
HeatmapBuilder.build_linear(
|
|
55
|
-
scores: linear_scores,
|
|
56
|
-
colors: HeatmapBuilder::GITHUB_GREEN,
|
|
57
|
-
cell_size: 18
|
|
58
|
-
)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
generate_example("linear_blue_ocean.svg", "linear with Blue Ocean palette", force: force) do
|
|
62
|
-
HeatmapBuilder.build_linear(
|
|
63
|
-
scores: linear_scores,
|
|
64
|
-
colors: HeatmapBuilder::BLUE_OCEAN,
|
|
65
|
-
cell_size: 18
|
|
66
|
-
)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
generate_example("linear_warm_sunset.svg", "linear with Warm Sunset palette", force: force) do
|
|
70
|
-
HeatmapBuilder.build_linear(
|
|
71
|
-
scores: linear_scores,
|
|
72
|
-
colors: HeatmapBuilder::WARM_SUNSET,
|
|
73
|
-
cell_size: 18
|
|
74
|
-
)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
generate_example("linear_purple_vibes.svg", "linear with Purple Vibes palette", force: force) do
|
|
78
|
-
HeatmapBuilder.build_linear(
|
|
79
|
-
scores: linear_scores,
|
|
80
|
-
colors: HeatmapBuilder::PURPLE_VIBES,
|
|
81
|
-
cell_size: 18
|
|
82
|
-
)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
generate_example("linear_red_to_green.svg", "linear with Red to Green palette", force: force) do
|
|
86
|
-
HeatmapBuilder.build_linear(
|
|
87
|
-
scores: linear_scores,
|
|
88
|
-
colors: HeatmapBuilder::RED_TO_GREEN,
|
|
89
|
-
cell_size: 18
|
|
90
|
-
)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
generate_example("linear_neon_gradient.svg", "linear with neon gradient (OKLCH interpolation)", force: force) do
|
|
94
|
-
HeatmapBuilder.build_linear(
|
|
95
|
-
scores: linear_scores,
|
|
96
|
-
colors: {from: "#00FFFF", to: "#FF1493", steps: 5},
|
|
97
|
-
cell_size: 18
|
|
98
|
-
)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
33
|
calendar_data = sample_calendar_data
|
|
102
34
|
|
|
103
35
|
generate_example("calendar_github_style.svg", "GitHub-style calendar", force: force) do
|
|
104
36
|
HeatmapBuilder.build_calendar(
|
|
105
|
-
|
|
37
|
+
values: calendar_data,
|
|
106
38
|
cell_size: 14,
|
|
107
39
|
month_spacing: 0
|
|
108
40
|
)
|
|
@@ -110,7 +42,7 @@ def generate_sample_svgs(force: false)
|
|
|
110
42
|
|
|
111
43
|
generate_example("calendar_default.svg", "default colors calendar", force: force) do
|
|
112
44
|
HeatmapBuilder.build_calendar(
|
|
113
|
-
|
|
45
|
+
values: calendar_data,
|
|
114
46
|
cell_size: 14,
|
|
115
47
|
month_spacing: 0
|
|
116
48
|
)
|
|
@@ -118,8 +50,8 @@ def generate_sample_svgs(force: false)
|
|
|
118
50
|
|
|
119
51
|
generate_example("calendar_blue_ocean.svg", "calendar with Blue Ocean palette", force: force) do
|
|
120
52
|
HeatmapBuilder.build_calendar(
|
|
121
|
-
|
|
122
|
-
colors: HeatmapBuilder::BLUE_OCEAN,
|
|
53
|
+
values: calendar_data,
|
|
54
|
+
colors: HeatmapBuilder::Calendar::BLUE_OCEAN,
|
|
123
55
|
cell_size: 14,
|
|
124
56
|
month_spacing: 0
|
|
125
57
|
)
|
|
@@ -127,8 +59,8 @@ def generate_sample_svgs(force: false)
|
|
|
127
59
|
|
|
128
60
|
generate_example("calendar_warm_sunset.svg", "calendar with Warm Sunset palette", force: force) do
|
|
129
61
|
HeatmapBuilder.build_calendar(
|
|
130
|
-
|
|
131
|
-
colors: HeatmapBuilder::WARM_SUNSET,
|
|
62
|
+
values: calendar_data,
|
|
63
|
+
colors: HeatmapBuilder::Calendar::WARM_SUNSET,
|
|
132
64
|
cell_size: 14,
|
|
133
65
|
month_spacing: 0
|
|
134
66
|
)
|
|
@@ -136,8 +68,8 @@ def generate_sample_svgs(force: false)
|
|
|
136
68
|
|
|
137
69
|
generate_example("calendar_purple_vibes.svg", "calendar with Purple Vibes palette", force: force) do
|
|
138
70
|
HeatmapBuilder.build_calendar(
|
|
139
|
-
|
|
140
|
-
colors: HeatmapBuilder::PURPLE_VIBES,
|
|
71
|
+
values: calendar_data,
|
|
72
|
+
colors: HeatmapBuilder::Calendar::PURPLE_VIBES,
|
|
141
73
|
cell_size: 14,
|
|
142
74
|
month_spacing: 0
|
|
143
75
|
)
|
|
@@ -145,8 +77,8 @@ def generate_sample_svgs(force: false)
|
|
|
145
77
|
|
|
146
78
|
generate_example("calendar_red_to_green.svg", "calendar with Red to Green palette", force: force) do
|
|
147
79
|
HeatmapBuilder.build_calendar(
|
|
148
|
-
|
|
149
|
-
colors: HeatmapBuilder::RED_TO_GREEN,
|
|
80
|
+
values: calendar_data,
|
|
81
|
+
colors: HeatmapBuilder::Calendar::RED_TO_GREEN,
|
|
150
82
|
cell_size: 14,
|
|
151
83
|
month_spacing: 0
|
|
152
84
|
)
|
|
@@ -154,7 +86,7 @@ def generate_sample_svgs(force: false)
|
|
|
154
86
|
|
|
155
87
|
generate_example("calendar_sunday_start.svg", "calendar with Sunday start", force: force) do
|
|
156
88
|
HeatmapBuilder.build_calendar(
|
|
157
|
-
|
|
89
|
+
values: calendar_data,
|
|
158
90
|
cell_size: 14,
|
|
159
91
|
start_of_week: :sunday,
|
|
160
92
|
month_spacing: 0
|
|
@@ -163,49 +95,60 @@ def generate_sample_svgs(force: false)
|
|
|
163
95
|
|
|
164
96
|
generate_example("calendar_with_outside_cells.svg", "calendar with outside cells", force: force) do
|
|
165
97
|
HeatmapBuilder.build_calendar(
|
|
166
|
-
|
|
98
|
+
values: calendar_data,
|
|
167
99
|
cell_size: 14,
|
|
168
100
|
show_outside_cells: true,
|
|
169
101
|
month_spacing: 0
|
|
170
102
|
)
|
|
171
103
|
end
|
|
172
104
|
|
|
173
|
-
generate_example("
|
|
174
|
-
HeatmapBuilder.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
105
|
+
generate_example("calendar_rounded_corners.svg", "calendar with rounded corners", force: force) do
|
|
106
|
+
HeatmapBuilder.build_calendar(
|
|
107
|
+
values: calendar_data,
|
|
108
|
+
cell_size: 14,
|
|
109
|
+
corner_radius: 2,
|
|
110
|
+
month_spacing: 0
|
|
179
111
|
)
|
|
180
112
|
end
|
|
181
113
|
|
|
182
|
-
generate_example("
|
|
183
|
-
HeatmapBuilder.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
114
|
+
generate_example("calendar_rounded_corners_max_radius.svg", "calendar with rounded corners (max radius)", force: force) do
|
|
115
|
+
HeatmapBuilder.build_calendar(
|
|
116
|
+
values: calendar_data,
|
|
117
|
+
cell_size: 14,
|
|
118
|
+
corner_radius: 7,
|
|
119
|
+
month_spacing: 0
|
|
188
120
|
)
|
|
189
121
|
end
|
|
190
122
|
|
|
191
|
-
generate_example("
|
|
123
|
+
generate_example("calendar_cell_borders.svg", "calendar with cell borders", force: force) do
|
|
192
124
|
HeatmapBuilder.build_calendar(
|
|
193
|
-
|
|
125
|
+
values: calendar_data,
|
|
194
126
|
cell_size: 14,
|
|
195
|
-
|
|
127
|
+
border_width: 1,
|
|
128
|
+
border_lightness_factor: 0.7,
|
|
196
129
|
month_spacing: 0
|
|
197
130
|
)
|
|
198
131
|
end
|
|
199
132
|
|
|
200
|
-
generate_example("
|
|
133
|
+
generate_example("calendar_no_borders.svg", "calendar with no cell borders", force: force) do
|
|
201
134
|
HeatmapBuilder.build_calendar(
|
|
202
|
-
|
|
135
|
+
values: calendar_data,
|
|
203
136
|
cell_size: 14,
|
|
204
|
-
|
|
137
|
+
border_width: 1,
|
|
138
|
+
border_lightness_factor: 1,
|
|
205
139
|
month_spacing: 0
|
|
206
140
|
)
|
|
207
141
|
end
|
|
208
142
|
|
|
143
|
+
generate_example("calendar_month_spacing_rounded.svg", "calendar with month spacing and rounded corners", force: force) do
|
|
144
|
+
HeatmapBuilder.build_calendar(
|
|
145
|
+
values: calendar_data,
|
|
146
|
+
cell_size: 14,
|
|
147
|
+
month_spacing: 10,
|
|
148
|
+
corner_radius: 3
|
|
149
|
+
)
|
|
150
|
+
end
|
|
151
|
+
|
|
209
152
|
puts "Done"
|
|
210
153
|
end
|
|
211
154
|
|
|
@@ -222,7 +165,7 @@ def sample_calendar_data
|
|
|
222
165
|
base_score = (seasonal_factor * 2.7 + 3.6).round
|
|
223
166
|
|
|
224
167
|
score = rand(0..base_score)
|
|
225
|
-
score
|
|
168
|
+
score /= 2 if [0, 6].include?(date.wday) # Weekend reduction
|
|
226
169
|
|
|
227
170
|
data[date.to_s] = score
|
|
228
171
|
end
|