defmodule CKEditor5.Helpers do @moduledoc """ Common helper functions for CKEditor5 components. """ @doc """ Assigns a unique ID if one is not already present in assigns. Generates a random UUID-based ID only when :id key is missing. """ def assign_id_if_missing(assigns, prefix) do Phoenix.Component.assign_new(assigns, :id, fn -> uuid = :crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower) "#{prefix}-#{uuid}" end) end @doc """ Checks if a given version string is in semantic versioning format (e.g., "1.0.0"). """ def is_semver_version?(version) when is_binary(version) do String.match?(version, ~r/^\d+\.\d+\.\d+(-[a-zA-Z0-9-.]+)?$/) end @doc """ Serializes a map of styles into a CSS string. Converts a map of styles into a string suitable for inline CSS. Example: %{color: "red", "font-size": "16px"} becomes "color: red; font-size: 16px". """ def serialize_styles_map(styles_map) when is_map(styles_map) do styles_map |> Enum.map_join("; ", fn {key, value} -> "#{key}: #{value}" end) end end