Skip to content

0 ‐ FAQ (Frequently Asked Questions)

Pierre-Yves Lapersonne edited this page Nov 26, 2024 · 1 revision

What is OUDS?

OUDS means "Orange Unified Design System". This is a new design system, again, but unified, trying to merge all requirements of Orange brands and affiliates so as to provide a unique design system, unified across all platforms and for all countries, companies, users and apps.

For which platform OUDS is available?

Today OUDS provides an Android library, this iOS library and a web library. Some work was done on Flutter, but this environment has been deprecated and the repository destroyed. In fact, Flutter was expected to be used for AMEA (Africa, Middle-East and Asia) area for all apps, but Orange MEA decided to choose another solution. Because Flutter is not recommended in the Orange guidelines, only Android (Kotlin), iOS (Swift) and Web (Boosted) are managed.

Which themes are provided?

The Orange theme is provided, as the default theme. There is also an inverse theme for particular use cases. Brands themes like Sosh are not managed yet, but are planned to be, and will be defined in our internal repository so as to not allow users to subclass it and use it except if allowed.

Which components are provided?

No components have been implemented yet, but we hope to have some of them at for the end of the year (buttons, text inputs).

What are the design system specifications?

All specifications are defined in Figma, used by the design team, even if we struggle to have well defined issues on GitHub for transparency and comfort of use. Do not expect to have muchd etails here, sadly.

Why OUDS is under MIT license?

To allow Orange subcontractors and affiliates, and also countries instances in fact, to use the OUDS products, it was necessary to provide the soruce code under an open source licence. MIT was enough permissive and understandable, so has been used. For legal reasons, it was not possible to keep internally the source code and give it to affiliates and subcontractors for free. For the same reasons, no inner source license was applied, nor common source process.

OUDS is not ODS?

ODS means "Orange Design System". It was an attempt to define whole new design system but for Orange affiliates and countries in AMEA and Europe areas. It provides components and themes for Android, iOS and Flutter apps and web projects. But because this design system did not embed the One-I system of Orange France, the project has been delayed, almost considered as unmaintained with two years of work and efforts wasted.

What is "tokenator" 🤖?

tokenator is a name given to an internal project based on amzn/style-dictionary (under Apache 2.0 license), with a lot of customizations, which will convert JSON files generated by Figma to Kotlin, Swift and Web objects for the own needs of the OUDS librairies ; that is the reason why there is no interest in publishing it in open source, it remains internal. The tool provides modifications using pull requests and a dedicated GitHub account. You can find tokenator contributions by filtering the Git history.

How many tokens OUDS iOS provides?

With version 0.5.0, we provide:

  • ~ 393 core raw tokens
  • ~ 22 Orange raw tokens
  • ~ 575 core semantic tokens

Yo can find below a Python script to compute the number of tokens. In few words, here are the outputs:

Core raw tokens:
	 ElevationRawTokens+Values.swift: 16
	 TypographyRawTokens+Composites.swift: 21
	 ColorRawTokens+Values.swift: 136
	 OpacityRawTokens+Values.swift: 10
	 DimensionRawTokens+Values.swift: 36
	 GridRawTokens+Values.swift: 44
	 TypographyRawTokens+Values.swift: 69
	 ElevationRawTokens+Composites.swift: 37
	 BorderRawTokens+Values.swift: 24
Core raw tokens --> 393

Orange raw tokens:
	 OrangeBrandColorRawTokens+Values.swift: 20
	 OrangeBrandTypographyRawTokens+Values.swift: 2
Orange raw tokens --> 22

Core semantic tokens:
	GridSemanticTokens.swift: 15
	BorderSemanticTokens.swift: 15
	SizeSemanticTokens.swift: 45
	ElevationCompositeSemanticTokens.swift: 8
	OpacitySemanticTokens.swift: 6
	TypographySemanticTokens.swift: 63
	ColorSemanticTokens.swift: 244
	ElevationSemanticTokens.swift: 32
	SpaceSemanticTokens.swift: 99
	TypographyCompositeSemanticTokens.swift: 23
	DimensionSemanticTokens.swift: 25
Core semantic tokens --> 575

And the Python code:

#!/usr/bin/env python3
# SPDX-FileCopyrightText: Copyright (c) Orange SA
# SPDX-License-Identifier: MIT

import os

def count_pattern_in_file(file_path, pattern):
    """
    Counts the number of instances for each pattern in a file.

    Args:
        file_path (str): Path to the file to process.
        pattern (str): Pattern to look for.

    Returns:
        int: Number of instances of the pattern in the file.
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()
            return content.count(pattern)
    except Exception as e:
        print(f"Error: Error while reading the file '{file_path}': '{e}'")
        return 0

def count_patterns_in_directory(directory, pattern):
    """
    Counts the number of instances of pattern in all files of given directory.

    Args:
        directory (str): Path of directory to process.
        pattern (str): The apttern to look for.

    Returns:
        dict: Dictionnary with paths of files as keys and instances numbers as values.
    """    
    results = {}
    if os.path.isdir(directory):
        for root, _, files in os.walk(directory):
            for file in files:
                file_path = os.path.join(root, file)
                count = count_pattern_in_file(file_path, pattern)
                results[file] = count
    else:
        print(f"Error: The directory '{directory}' does not exist")
    return results

# ------------ Main ------------
if __name__ == "__main__":
    # Update references to directories of course
    # Do not forget to `chmod u+x` the file
    # And define the path to the ouds-ios repository
    project_root = "ouds-ios/OUDS/Core/"

    print("Core raw tokens:")
    occurrences = count_patterns_in_directory(project_root + "Tokens/RawTokens/Sources/Values", "public static let")
    accumulator = 0
    for file, counts in occurrences.items():
        print(f"\t {file}: {counts}")
        accumulator += counts
    print(f"Core raw tokens --> {accumulator}")

    print("\nOrange raw tokens:")
    occurrences = count_patterns_in_directory(project_root + "Themes/Orange/Sources/Values", "public static let")
    accumulator = 0
    for file, counts in occurrences.items():
        print(f"\t {file}: {counts}")
        accumulator += counts
    print(f"Orange raw tokens --> {accumulator}")

    print("\nCore semantic tokens:")
    occurrences = count_patterns_in_directory(project_root + "Tokens/SemanticTokens/Sources/Values", "var")
    accumulator = 0
    for file, counts in occurrences.items():
        print(f"\t{file}: {counts}")
        accumulator += counts
    print(f"Core semantic tokens --> {accumulator}")