enum class Glyph { Jobs, History, Cash, Alerts, Support, Arrow, Pin, Phone, More, Refresh, Back, Check, Close, Warning, Eye, EyeOff, Person, Logout, Chevron, Package, Shield, Chat, Location }
@Composable fun BIcon(glyph: Glyph, modifier: Modifier = Modifier.size(UiSize.Icon), color: Color = LocalContentColor.current) {
    Canvas(modifier.clearAndSetSemantics { }) {
        scale(size.minDimension / 24f, pivot = Offset.Zero) {
            val stroke = Stroke(width = IconStroke, cap = StrokeCap.Round)
            fun line(x: Float, y: Float, x2: Float, y2: Float) = drawLine(color, Offset(x,y), Offset(x2,y2), IconStroke, StrokeCap.Round)
            fun path(vararg points: Pair<Float, Float>, close: Boolean = false) { val p = Path(); points.forEachIndexed { i, (x,y) -> if (i == 0) p.moveTo(x,y) else p.lineTo(x,y) }; if (close) p.close(); drawPath(p, color, style = stroke) }
            when (glyph) {
                Glyph.Jobs, Glyph.Package -> { path(4f to 7f, 12f to 3f, 20f to 7f, 20f to 17f, 12f to 21f, 4f to 17f, close = true); path(4f to 7f, 12f to 12f, 20f to 7f); line(12f,12f,12f,21f); line(8f,5f,16f,10f) }
                Glyph.History -> { drawCircle(color, 8.5f, Offset(12f,12f), style = stroke); path(12f to 7f,12f to 12f,16f to 14f) }
                Glyph.Cash -> { drawRoundRect(color, Offset(3f,5f), Size(18f,15f), CornerRadius(2f), style=stroke); drawRoundRect(color, Offset(15f,10f), Size(7f,6f), CornerRadius(1f), style=stroke); drawCircle(color, 0.9f,Offset(18f,13f)); line(5f,5f,18f,3f) }
                Glyph.Alerts -> { val p=Path().apply { moveTo(5f,17f); lineTo(7f,14f); lineTo(7f,9f); cubicTo(7f,2f,17f,2f,17f,9f); lineTo(17f,14f); lineTo(19f,17f); close() }; drawPath(p,color,style=stroke); drawArc(color,0f,180f,false,Offset(10f,18f),Size(4f,3f),style=stroke) }
                Glyph.Support -> { drawArc(color,180f,180f,false,Offset(4f,4f),Size(16f,16f),style=stroke); drawRoundRect(color,Offset(3f,11f),Size(4f,7f),CornerRadius(1.5f),style=stroke); drawRoundRect(color,Offset(17f,11f),Size(4f,7f),CornerRadius(1.5f),style=stroke); path(19f to 18f,17f to 21f,12f to 21f) }
                Glyph.Arrow -> path(3f to 10f,21f to 3f,14f to 21f,11f to 13f,3f to 10f,close=true)
                Glyph.Pin -> { val p=Path().apply { moveTo(12f,22f); cubicTo(10f,19f,4f,14f,4f,9f); cubicTo(4f,0f,20f,0f,20f,9f); cubicTo(20f,14f,14f,19f,12f,22f); close() }; drawPath(p,color,style=stroke); drawCircle(color,2.5f,Offset(12f,9f),style=stroke) }
                Glyph.Phone -> path(5f to 3f,9f to 3f,10f to 8f,8f to 10f,14f to 16f,16f to 14f,21f to 15f,21f to 19f,18f to 21f,12f to 18f,6f to 12f,3f to 6f,5f to 3f,close=true)
                Glyph.More -> { for (y in listOf(5f,12f,19f)) drawCircle(color,1.5f,Offset(12f,y)) }
                Glyph.Refresh -> { drawArc(color,45f,285f,false,Offset(4f,4f),Size(16f,16f),style=stroke); path(20f to 4f,20f to 10f,14f to 10f) }
                Glyph.Back -> { path(14f to 5f,7f to 12f,14f to 19f); line(7f,12f,21f,12f) }
                Glyph.Check -> path(5f to 12f,10f to 17f,20f to 6f)
                Glyph.Close -> { line(6f,6f,18f,18f);line(18f,6f,6f,18f) }
                Glyph.Warning -> { path(12f to 3f,22f to 21f,2f to 21f,close=true);line(12f,9f,12f,14f);drawCircle(color,0.8f,Offset(12f,18f)) }
                Glyph.Eye, Glyph.EyeOff -> { val p=Path().apply { moveTo(2f,12f); cubicTo(7f,3f,17f,3f,22f,12f); cubicTo(17f,21f,7f,21f,2f,12f);close() };drawPath(p,color,style=stroke);drawCircle(color,3f,Offset(12f,12f),style=stroke); if(glyph==Glyph.EyeOff)line(3f,3f,21f,21f) }
                Glyph.Person -> { drawCircle(color,4f,Offset(12f,7f),style=stroke);drawArc(color,180f,180f,false,Offset(4f,13f),Size(16f,16f),style=stroke) }
                Glyph.Logout -> { path(10f to 3f,4f to 3f,4f to 21f,10f to 21f);line(9f,12f,22f,12f);path(17f to 7f,22f to 12f,17f to 17f) }
                Glyph.Chevron -> path(9f to 5f,16f to 12f,9f to 19f)
                Glyph.Shield -> { path(12f to 2f,21f to 6f,19f to 16f,12f to 22f,5f to 16f,3f to 6f,close=true);path(8f to 12f,11f to 15f,17f to 9f) }
                Glyph.Chat -> { drawRoundRect(color,Offset(3f,3f),Size(18f,15f),CornerRadius(3f),style=stroke);path(6f to 18f,6f to 22f,11f to 18f);line(7f,8f,17f,8f);line(7f,12f,14f,12f) }
                Glyph.Location -> { drawCircle(color,7f,Offset(12f,12f),style=stroke);drawCircle(color,2f,Offset(12f,12f));line(12f,1f,12f,5f);line(12f,19f,12f,23f);line(1f,12f,5f,12f);line(19f,12f,23f,12f) }
            }
        }
    }
}
