In a large bowl, whisk together the flour, sugar, and salt.
In a separate bowl, combine the cold milk, cold water, and yeast. Let it sit for about 5 minutes until the yeast is foamy.
Pour the wet ingredients into the dry ingredients and mix with a wooden spoon or spatula until a shaggy dough forms.
Turn the dough out onto a lightly floured surface and knead for 3-5 minutes until it becomes slightly smoother. Don't over-knead.
Form the dough into a rectangle (about 8x10 inches), wrap it tightly in plastic wrap, and refrigerate for at least 2 hours, or preferably overnight.
Place the cold butter slices between two sheets of parchment paper.
Using a rolling pin, pound the butter into a flat, even rectangle (about 6x8 inches). The butter should still be cold but pliable.
Keep the butter refrigerated until ready to use.
Remove the dough from the refrigerator and roll it out on a lightly floured surface into a rectangle about 10x16 inches.
Place the cold butter block in the center of the dough, leaving about a 1-inch border on all sides.
Fold the dough over the butter like a letter, encasing the butter completely. Pinch the edges to seal.
Turn the dough 90 degrees so the short end is facing you.
Gently roll the dough out into a long rectangle (about 10x24 inches), being careful not to press too hard and squeeze out the butter.
Fold the dough into thirds, like a letter, again.
Wrap the dough in plastic wrap and refrigerate for 30 minutes.
Repeat the rolling and folding process (steps 3 and 4) two more times, refrigerating the dough for 30 minutes after each fold.
After the final refrigeration, roll the dough out into a large rectangle, about 1/8 inch thick.
Trim the edges to create clean, straight lines.
Cut the dough into long triangles. The size is up to you, but about 4-5 inches wide at the base is a good starting point.
Place a small amount of chopped chocolate or a few chocolate chunks at the base of each triangle.
Starting at the base, gently roll up each triangle towards the tip.
Curve the ends slightly to create the classic croissant shape.
Place the shaped croissants on a baking sheet lined with parchment paper, leaving some space between them.
Cover the croissants loosely with plastic wrap and let them rise in a warm place for 1.5-2 hours, or until they are puffy and doubled in size.
Preheat your oven to 375°F (190°C).
If using, whisk together the egg and milk/water for the egg wash. Gently brush the croissants with the egg wash.
Bake for 18-22 minutes, or until the croissants are golden brown and cooked through.
Let the croissants cool slightly on the baking sheet before transferring them to a wire rack to cool completely.
They are best enjoyed warm, when the chocolate is melted and gooey.