d2lang/d2 · error

expected "text-transform" to be one of (%s)

Error message

expected "text-transform" to be one of (%s)

What it means

The "text-transform" style key must be one of d2ast.TextTransforms (e.g. uppercase, lowercase, title, none). Matching is case-insensitive; anything else returns this error listing the valid options.

Source

Thrown at d2graph/d2graph.go:488

		if err != nil {
			return errors.New(`expected "filled" to be true or false`)
		}
		s.Filled.Value = value
	case "double-border":
		if s.DoubleBorder == nil {
			break
		}
		_, err := strconv.ParseBool(value)
		if err != nil {
			return errors.New(`expected "double-border" to be true or false`)
		}
		s.DoubleBorder.Value = value
	case "text-transform":
		if s.TextTransform == nil {
			break
		}
		if !go2.Contains(d2ast.TextTransforms, strings.ToLower(value)) {
			return fmt.Errorf(`expected "text-transform" to be one of (%s)`, strings.Join(d2ast.TextTransforms, ", "))
		}
		s.TextTransform.Value = value
	default:
		return fmt.Errorf("unknown style key: %s", key)
	}

	return nil
}

type ContainerLevel int

func (l ContainerLevel) LabelSize() int {
	// Largest to smallest
	if l == 1 {
		return d2fonts.FONT_SIZE_XXL
	} else if l == 2 {
		return d2fonts.FONT_SIZE_XL
	} else if l == 3 {

View on GitHub (pinned to 0d69dca6f5)

Solutions

  1. Use one of: uppercase, lowercase, title, none (see joined list in the message)
  2. Lowercase the value (matching is case-insensitive, but use canonical form)
  3. Remove the key if no transform is wanted

Example fix

// before
x.style.text-transform: capitalize
// after
x.style.text-transform: title
Defensive patterns

Strategy: validation

Validate before calling

var textTransforms = map[string]bool{"uppercase":true, "lowercase":true, "title":true, "none":true}
if !textTransforms[strings.ToLower(v)] { /* reject before SetStyle */ }

Type guard

func validTextTransform(v string) bool {
	return slices.Contains(d2ast.TextTransforms, strings.ToLower(v))
}

Try / catch

if err := obj.SetStyle("text-transform", v); err != nil {
	return fmt.Errorf("text-transform invalid: %v", err)
}

Prevention

When it happens

Trigger: Assigning style key "text-transform" with a value not in d2ast.TextTransforms — e.g. "capitalize", "UPPER CASE", or CSS-style values like "initial".

Common situations: Porting CSS text-transform habits into .d2 files, typos such as "titel", or expecting values CSS supports that D2 does not implement.

Related errors


AI-assisted analysis of d2lang/d2@0d69dca6f5 (2026-08-31). Data as JSON: /api/errors/9dcd599acdee12a4. Report an issue: GitHub.