Faits :
A.
Par jugement du 8 mai 2018, le Tribunal pénal de l'arrondissement de la Sarine a condamné X._ pour crime contre la loi fédérale sur les stupéfiants (art. 19 al. 1 let. c et d et al. 2 let. a LStup) à une peine privative de liberté de 12 mois, avec sursis pendant 5 ans.
B.
Par arrêt du 18 mars 2019, la Cour d'appel pénal du Tribunal cantonal fribourgeois a rejeté l'appel formé par X._ contre le jugement du 8 mai 2018, qui a été confirmé.
La cour cantonale a retenu qu'entre le 5 mars 2016 et le 30 juin 2016, X._ avait vendu de la cocaïne à A._ et à B._, revendeurs de rue, respectivement à raison de 50 et 10 grammes. Dès lors que la drogue avait un taux de pureté de 31%, les transactions en question avaient porté au total sur 18.6 grammes de substance pure (60 grammes x 31%).
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 18 mars 2019. Elle conclut, avec suite de frais et dépens, principalement à sa réforme en ce sens qu'elle est condamnée pour infraction à la LStup (art. 19 al. 1 let. c et d LStup) à une peine pécuniaire de 90 jours-amende, avec sursis pendant 2 ans. Subsidiairement, elle conclut à la réforme de l'arrêt attaqué en ce sens qu'elle est condamnée pour la même infraction à une peine fixée par la cour cantonale après renvoi de la cause.
Invité à se déterminer, le ministère public a conclu au rejet du recours. Quant à l'autorité précédente, elle a renoncé à présenter des observations.

Considérant en droit :
1.
La recourante invoque un établissement arbitraire des faits ainsi qu'une violation du principe " in dubio pro reo ".
1.1. Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de fait de la décision entreprise (<ref-law>), à moins que celles-ci n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, à savoir pour l'essentiel de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat (<ref-ruling> consid. 2.3.1 p. 244). Le Tribunal fédéral n'entre pas en matière sur les critiques de nature appellatoire (<ref-ruling> consid. 2.4 p. 368 et les références citées).
La présomption d'innocence, garantie par les <ref-law>, 32 al. 1 Cst., 14 par. 2 Pacte ONU II et 6 par. 2 CEDH, ainsi que son corollaire, le principe " in dubio pro reo ", concernent tant le fardeau de la preuve que l'appréciation des preuves au sens large (<ref-ruling> consid. 2.2.3.1 p. 348 s.; <ref-ruling> consid. 2a p. 40 s.).
En tant que règle sur le fardeau de la preuve, elle signifie, au stade du jugement, que le fardeau de la preuve incombe à l'accusation et que le doute doit profiter au prévenu. Comme règle d'appréciation des preuves (sur la portée et le sens précis de la règle sous cet angle, cf. <ref-ruling> consid. 2.2.3.3 p. 351 s.), la présomption d'innocence signifie que le juge ne doit pas se déclarer convaincu de l'existence d'un fait défavorable à l'accusé si, d'un point de vue objectif, il existe des doutes quant à l'existence de ce fait. Il importe peu qu'il subsiste des doutes seulement abstraits et théoriques, qui sont toujours possibles, une certitude absolue ne pouvant être exigée. Il doit s'agir de doutes sérieux et irréductibles, c'est-à-dire de doutes qui s'imposent à l'esprit en fonction de la situation objective. Lorsque l'appréciation des preuves et la constatation des faits sont critiquées en référence au principe " in dubio pro reo ", celui-ci n'a pas de portée plus large que l'interdiction de l'arbitraire (<ref-ruling> consid. 2.2.3.3 p. 351 s.; <ref-ruling> consid. 1.1 p. 503; <ref-ruling> consid. 7 p. 82).
1.2. La recourante ne revient pas, en tant que telles, sur les transactions de cocaïne qui lui sont reprochées, ni sur l'appréciation des preuves réalisée à cet égard par l'autorité précédente. Elle conteste en revanche qu'un taux de pureté de 31% puisse être retenu.
1.2.1. Pour établir le taux de pureté de la cocaïne vendue par la recourante, il paraît que la cour cantonale s'est fondée sur l'analyse réalisée le 27 juillet 2016 par l'Institut de médecine légale de l'Université de Berne (IML) à partir de la drogue séquestrée dans le cadre de l'affaire dite " C._ ", dont la recourante serait l'une des protagonistes (cf. dossier cantonal, pièce n° 4000-4001; jugement de première instance, p. 3 et 13; arrêt entrepris, consid. 2.8 p. 13). Cette analyse, réalisée selon la méthode " CLHP " (" chromatographie en phase liquide haute performance "), mentionne des taux de pureté de " 35% ", si l'on tient compte de la cocaïne sous sa forme de chlorydrate (" Cocain Hydrochlorid "), et de " 31% (± 3.5%) ", sous sa forme de base (" Cocain Base ").
Cela étant, malgré le caractère équivoque de l'analyse réalisée par l'IML quant au taux à prendre en considération, la cour cantonale n'explique pas les raisons pour lesquelles elle n'a pas déduit du taux de 31% finalement retenu, la fraction de 3.5% sus-évoquée, qui par la mention du signe " ± " semble définir une marge d'erreur ou à tout le moins la possibilité d'une variation, alors que la prise en considération d'un taux de pureté de 27.5% (31% - 3.5%) constitue en l'espèce l'hypothèse la plus favorable à la recourante (cf. <ref-law>).
1.2.2. Compte tenu de 60 grammes de substance brute, la différence entre les taux susceptibles d'être déduits de l'analyse précitée influe sur la qualification juridique de l'infraction. Ainsi, un taux de pureté de 27.5% a pour effet d'exclure l'existence d'un cas aggravé au sens de l'<ref-law>, les transactions en cause ne portant alors plus que sur 16.5 grammes de substance pure (27.5% x 60 grammes), quantité inférieure à la limite de 18 grammes retenue par la jurisprudence (cf. <ref-ruling> consid. 3.2 p. 103; <ref-ruling> consid. 3b p. 145).
1.3. La prise en compte, dans ce contexte, d'un taux de pureté de 31%, soit de 18.6 grammes de substance pure (31% x 60 grammes), viole la présomption d'innocence de la recourante. Le grief est dès lors fondé.
1.4. Dans la mesure où, pour le surplus, la cour cantonale ne retient pas qu'un autre cas aggravé (cf. art. 19 al. 2 let. b-d LStup) était réalisé, la condamnation de la recourante en raison de l'infraction prévue à l'<ref-law> est contraire au droit fédéral.
2.
Le recours doit donc être admis, l'arrêt entrepris annulé et la cause renvoyée à la cour cantonale pour nouvelle décision. Dès lors qu'il appartiendra à la cour cantonale de fixer la peine de la recourante en relation avec sa condamnation du chef de l'art. 19 al. 1 let. c et d LStup, qui n'est pas contestée, et de statuer à nouveau sur les frais et indemnités, il n'y a pas lieu d'examiner les griefs développés par la recourante en lien avec ces aspects. On relèvera cependant, s'agissant du délai d'épreuve, dont la fixation à la durée maximale de cinq ans (cf. <ref-law>) est contestée par la recourante, que la cour cantonale devra prendre en considération, le cas échéant, dans son nouvel examen, le fait qu'entre le prononcé de l'arrêt annulé et la notification du présent arrêt, la recourante s'est déjà trouvée en période d'épreuve (cf. <ref-ruling> consid. 2b).
3.
La recourante qui obtient gain de cause ne supporte pas les frais (<ref-law>) et peut prétendre à une indemnité de dépens à la charge du canton de Fribourg (art. 68 al. 1 et 2), ce qui rend sans objet la requête d'assistance judiciaire (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis, l'arrêt attaqué est annulé et la cause est renvoyée à la cour cantonale pour nouvelle décision.
2.
Il n'est pas perçu de frais judiciaires.
3.
Le canton de Fribourg versera au mandataire de la recourante une indemnité de 3000 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal de l'Etat de Fribourg, Cour d'appel pénal.
Lausanne, le 20 août 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Tinguely