Source code for daitum_ui.icons

# Copyright 2026 Daitum
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Icon enumeration for UI components.

This module provides the Icon enum, which contains identifiers for all available
icons that can be used in UI components. Icons come from FontAwesome 6 and
custom Daitum application icon sets, organized by category and purpose.

Main Components
---------------

**Icon Enum:**
    Single enumeration containing all available icon identifiers organized into:

    - FontAwesome 6 solid icons (standard filled icons)
    - FontAwesome 6 regular icons (outlined variants)
    - Daitum validation icons
    - Daitum rostering & child care icons
    - Daitum model editor icons
    - Daitum common component icons
    - Special icons (NULL for empty/no icon)

Icon Categories
---------------

**FontAwesome 6 - Solid Icons:**
    Standard filled icons from FontAwesome 6, including:

    - Common UI icons (CIRCLE, STAR, LOCK, CLOCK)
    - Navigation icons (HOUSE, PLANE_UP, RIGHT_FROM_BRACKET)
    - Action icons (COPY, PEN_TO_SQUARE, PAPER_PLANE)
    - Domain-specific icons (BURGER, GAMING, ACCOMMODATION, WINE_BOTTLE)
    - Education icons (GRADUATION_CAP, BOOK, CHALKBOARD_USER)
    - Child care icons (HANDS_HOLDING_CHILD, CHILD_REACHING)
    - Activity icons (PERSON_SWIMMING, UMBRELLA_BEACH, TREE)
    - Finance icons (DOLLAR_SIGN, BRIEFCASE_MEDICAL)
    - Communication icons (COMMENT, CIRCLE_INFO)

**FontAwesome 6 - Regular Icons (Outlined):**
    Outlined variants of FontAwesome icons, prefixed with ``REG_``:

    - ``REG_STAR``, ``REG_BELL``, ``REG_CLOCK``
    - ``REG_CIRCLE``, ``REG_COMMENT``
    - ``REG_BURGER``, ``REG_GAMING``, ``REG_ACCOMMODATION``
    - Useful for lighter visual weight or inactive states

**Daitum Validation Icons:**
    - CHECK: Validation success indicator

**Daitum Rostering & Child Care Icons:**
    Specialized icons for rostering and child care applications:

    - Selection: SELECTED, UNSELECTED
    - Staff qualifications: QUALIFIED, CERT_ONLY, RESPONSIBLE_PERSON
    - Compliance: FIRST_AID, WWCC_VALID, WWCC_INVALID
    - Time management: CONTACT_TIME, BREAK_TIME, SHIFT_START_TYPE
    - Activities: PROGRAMMING, SWIMMING, STUDY, ISS
    - Operations: SHIFT_COVERAGE, ADJUST_ROSTER_ORDER, OPTIMISE
    - Actions: IMPORT, PUBLISH
    - Information: INFO, HELP, ALERT

**Daitum Model Editor Icons:**
    Array manipulation icons:

    - ADD_ROW: Add new row to array
    - REMOVE_ROW: Delete row from array
    - MOVE_ROW: Reorder rows in array

**Daitum Common Component Icons:**
    - RESET_ICON: Reset value to default

**Special Icons:**
    - NULL: Empty icon (renders nothing)

Icon Identifier Format
----------------------

Icon identifiers follow specific format patterns:

**FontAwesome Icons:**
    "FontAwesome.6.{ICON_NAME}"

    - Example: "FontAwesome.6.STAR"
    - Regular variants: "FontAwesome.6.REG_{ICON_NAME}"
    - Example: "FontAwesome.6.REG_STAR"

**Daitum Icons:**
    "Daitum.{category}.{subcategory}.{ICON_NAME}"

    - Validation: "Daitum.ribbonMenu.validationDialog.VALID"
    - Rostering: "Daitum.applications.rostering.forChildCare.{ICON_NAME}"
    - Editor: "Daitum.modelEditor.editors.array.{ICON_NAME}"
    - Components: "Daitum.commonComponents.{component}.{ICON_NAME}"

**Special:**
    - Empty string "" for NULL icon

Usage Patterns
--------------

Icons are typically used in two contexts:

1. **IconConfig for UI Elements:**
   Used with IconConfig to configure icon appearance with color

2. **Direct Icon References:**
   Used directly in component properties that accept icons

The Icon enum ensures type safety and provides autocomplete support
in development environments.

Examples
--------
Using icons with IconConfig::

    from daitum_ui.icons import Icon
    from daitum_ui.styles import IconConfig

    # Success icon in green
    success_icon = IconConfig(
        source=Icon.CHECK,
        color="#4caf50"
    )

    # Warning icon in orange
    warning_icon = IconConfig(
        source=Icon.TRIANGLE_EXCLAMATION,
        color="#ff9800"
    )

    # Star rating icon in gold
    star_icon = IconConfig(
        source=Icon.STAR,
        color="#ffd700"
    )

Using outlined icons for inactive states::

    # Active state - solid star
    active_icon = IconConfig(
        source=Icon.STAR,
        color="#ffc107"
    )

    # Inactive state - outlined star
    inactive_icon = IconConfig(
        source=Icon.REG_STAR,
        color="#9e9e9e"
    )

Using domain-specific icons::

    # Child care activity icons
    swimming_icon = IconConfig(source=Icon.SWIMMING, color="#2196f3")
    programming_icon = IconConfig(source=Icon.PROGRAMMING, color="#9c27b0")
    study_icon = IconConfig(source=Icon.STUDY, color="#ff5722")

    # Staff qualification icons
    qualified_icon = IconConfig(source=Icon.QUALIFIED, color="#4caf50")
    first_aid_icon = IconConfig(source=Icon.FIRST_AID, color="#f44336")

Using selection icons::

    # For icon checkbox states
    from daitum_ui.styles import IconCheckboxEditor

    checkbox_editor = IconCheckboxEditor(
        on_icon=IconConfig(source=Icon.SELECTED, color="#2196f3"),
        off_icon=IconConfig(source=Icon.UNSELECTED, color="#9e9e9e")
    )

Using action icons in buttons::

    from daitum_ui.elements import Button

    # Save button with paper plane icon
    save_button = Button(
        text_value="Send",
        icon_source=Icon.PAPER_PLANE.value,
        icon_color="#ffffff",
        background_color="#2196f3"
    )

    # Edit button with pen icon
    edit_button = Button(
        text_value="Edit",
        icon_source=Icon.PEN_TO_SQUARE.value,
        icon_color="#ffffff"
    )

Using compliance and validation icons::

    # WWCC validation status
    valid_wwcc = IconConfig(source=Icon.WWCC_VALID, color="#4caf50")
    invalid_wwcc = IconConfig(source=Icon.WWCC_INVALID, color="#f44336")

    # General validation check
    validation_check = IconConfig(source=Icon.CHECK, color="#4caf50")

Using information and help icons::

    # Information icon
    info_icon = IconConfig(
        source=Icon.INFO,
        color="#2196f3"
    )

    # Help icon
    help_icon = IconConfig(
        source=Icon.HELP,
        color="#9c27b0"
    )

    # Alert icon
    alert_icon = IconConfig(
        source=Icon.ALERT,
        color="#ff9800"
    )

Using NULL icon for conditional display::

    # Show icon only when condition is met
    conditional_icon = IconConfig(
        source=Icon.CHECK if is_valid else Icon.NULL,
        color="#4caf50"
    )

Using navigation icons::

    # Login/Logout
    login_icon = IconConfig(source=Icon.RIGHT_TO_BRACKET, color="#4caf50")
    logout_icon = IconConfig(source=Icon.RIGHT_FROM_BRACKET, color="#f44336")

    # Home navigation
    home_icon = IconConfig(source=Icon.HOUSE, color="#2196f3")

Using lock status icons::

    # Locked state
    locked_icon = IconConfig(source=Icon.LOCK, color="#f44336")

    # Unlocked state
    unlocked_icon = IconConfig(source=Icon.LOCK_OPEN, color="#4caf50")

Using array editor icons::

    # Row manipulation icons
    add_icon = IconConfig(source=Icon.ADD_ROW, color="#4caf50")
    remove_icon = IconConfig(source=Icon.REMOVE_ROW, color="#f44336")
    move_icon = IconConfig(source=Icon.MOVE_ROW, color="#2196f3")
"""

from enum import Enum


[docs] class Icon(Enum): """ Enumeration of available icons for UI components. Icons are organized into several categories: **FontAwesome 6 Icons:** - Standard icons (solid variants) - Regular (outlined) variants prefixed with ``REG_`` **Daitum Application Icons:** - Rostering and child care specific icons - Model editor icons - Common component icons Each enum value contains the full icon identifier string used by the rendering system to locate and display the appropriate icon. """ # FontAwesome 6 - Solid Icons BEER_MUG_EMPTY = "FontAwesome.6.BEER_MUG_EMPTY" ACCOMMODATION = "FontAwesome.6.ACCOMMODATION" BOTTLE_SHOP = "FontAwesome.6.BOTTLE_SHOP" CIRCLE = "FontAwesome.6.CIRCLE" BURGER = "FontAwesome.6.BURGER" GAMING = "FontAwesome.6.GAMING" PEN_TO_SQUARE = "FontAwesome.6.PEN_TO_SQUARE" TRIANGLE_EXCLAMATION = "FontAwesome.6.TRIANGLE_EXCLAMATION" STAR = "FontAwesome.6.STAR" USER_PEN = "FontAwesome.6.USER_PEN" PLANE_UP = "FontAwesome.6.PLANE_UP" COPY = "FontAwesome.6.COPY" LOCK = "FontAwesome.6.LOCK" LOCK_OPEN = "FontAwesome.6.LOCK_OPEN" CLOCK = "FontAwesome.6.CLOCK" PERSON_SWIMMING = "FontAwesome.6.PERSON_SWIMMING" BOOK_OPEN_READER = "FontAwesome.6.BOOK_OPEN_READER" RIGHT_FROM_BRACKET = "FontAwesome.6.RIGHT_FROM_BRACKET" RIGHT_TO_BRACKET = "FontAwesome.6.RIGHT_TO_BRACKET" CHALKBOARD_USER = "FontAwesome.6.CHALKBOARD_USER" DOLLAR_SIGN = "FontAwesome.6.DOLLAR_SIGN" BRIEFCASE_MEDICAL = "FontAwesome.6.BRIEFCASE_MEDICAL" AWARD = "FontAwesome.6.AWARD" GRADUATION_CAP = "FontAwesome.6.GRADUATION_CAP" HANDS_HOLDING_CHILD = "FontAwesome.6.HANDS_HOLDING_CHILD" TREE = "FontAwesome.6.TREE" UMBRELLA_BEACH = "FontAwesome.6.UMBRELLA_BEACH" ADDRESS_BOOK = "FontAwesome.6.ADDRESS_BOOK" CALENDAR_X_MARK = "FontAwesome.6.CALENDAR_X_MARK" CHILD_REACHING = "FontAwesome.6.CHILD_REACHING" BOLT = "FontAwesome.6.BOLT" PAPER_PLANE = "FontAwesome.6.PAPER_PLANE" CIRCLE_INFO = "FontAwesome.6.CIRCLE_INFO" BOOK = "FontAwesome.6.BOOK" COMMENT = "FontAwesome.6.COMMENT" WINE_BOTTLE = "FontAwesome.6.WINE_BOTTLE" HOUSE = "FontAwesome.6.HOUSE" DICE = "FontAwesome.6.DICE" HALF_CIRCLE = "FontAwesome.6.HALF_CIRCLE" TRUCK = "FontAwesome.6.TRUCK" # FontAwesome Pro - Solid Icons LOCATION_DOT = "FAPro.solid.LOCATION_DOT" LOCATION_PIN = "FAPro.solid.LOCATION_PIN" MAP_MARKER_PLUS = "FAPro.solid.MAP_MARKER_PLUS" MAP_MARKER_CHECK = "FAPro.solid.MAP_MARKER_CHECK" HELMET_SAFETY = "FAPro.solid.HELMET_SAFETY" USER_HELMET_SAFETY = "FAPro.solid.USER_HELMET_SAFETY" PERSON_DIGGING = "FAPro.solid.PERSON_DIGGING" # FontAwesome 6 - Regular (Outlined) Icons REG_STAR = "FontAwesome.6.REG_STAR" REG_BELL = "FontAwesome.6.REG_BELL" REG_CLOCK = "FontAwesome.6.REG_CLOCK" REG_CIRCLE_QUESTION = "FontAwesome.6.REG_CIRCLE_QUESTION" REG_COMMENT = "FontAwesome.6.REG_COMMENT" REG_DICE = "FontAwesome.6.REG_DICE" REG_BURGER = "FontAwesome.6.REG_BURGER" REG_GAMING = "FontAwesome.6.REG_GAMING" REG_BOTTLE_SHOP = "FontAwesome.6.REG_BOTTLE_SHOP" REG_CIRCLE = "FontAwesome.6.REG_CIRCLE" REG_HALF_CIRCLE = "FontAwesome.6.REG_HALF_CIRCLE" REG_ACCOMMODATION = "FontAwesome.6.REG_ACCOMMODATION" # Daitum - Validation Icons CHECK = "Daitum.ribbonMenu.validationDialog.VALID" # Daitum - Rostering & Child Care Application Icons CONTACT_TIME = "Daitum.applications.rostering.forChildCare.CONTACT_TIME" SELECTED = "Daitum.applications.rostering.forChildCare.SELECTED" UNSELECTED = "Daitum.applications.rostering.forChildCare.UNSELECTED" RESPONSIBLE_PERSON = "Daitum.applications.rostering.forChildCare.RESPONSIBLE_PERSON" QUALIFIED = "Daitum.applications.rostering.forChildCare.QUALIFIED" CERT_ONLY = "Daitum.applications.rostering.forChildCare.CERT_ONLY" ADJUST_ROSTER_ORDER = "Daitum.applications.rostering.forChildCare.ADJUST_ROSTER_ORDER" FIRST_AID = "Daitum.applications.rostering.forChildCare.FIRST_AID" WWCC_VALID = "Daitum.applications.rostering.forChildCare.WWCC_VALID" WWCC_INVALID = "Daitum.applications.rostering.forChildCare.WWCC_INVALID" SHIFT_START_TYPE = "Daitum.applications.rostering.forChildCare.SHIFT_START_TYPE" BREAK_TIME = "Daitum.applications.rostering.forChildCare.BREAK_TIME" IMPORT = "Daitum.applications.rostering.forChildCare.IMPORT" PROGRAMMING = "Daitum.applications.rostering.forChildCare.PROGRAMMING" SWIMMING = "Daitum.applications.rostering.forChildCare.SWIMMING" STUDY = "Daitum.applications.rostering.forChildCare.STUDY" ISS = "Daitum.applications.rostering.forChildCare.ISS" SHIFT_COVERAGE = "Daitum.applications.rostering.forChildCare.SHIFT_COVERAGE" OPTIMISE = "Daitum.applications.rostering.forChildCare.OPTIMISE" PUBLISH = "Daitum.applications.rostering.forChildCare.PUBLISH" INFO = "Daitum.applications.rostering.forChildCare.INFO" HELP = "Daitum.applications.rostering.forChildCare.HELP" ALERT = "Daitum.applications.rostering.forChildCare.ALERT" # Daitum - Model Editor Icons ADD_ROW = "Daitum.modelEditor.editors.array.ADD_ROW" REMOVE_ROW = "Daitum.modelEditor.editors.array.REMOVE_ROW" MOVE_ROW = "Daitum.modelEditor.editors.array.MOVE_ROW" # Daitum - Common Component Icons RESET_ICON = "Daitum.commonComponents.readOnlyResettableField.RESET_VALUE" # Daitum - Model Visualization CAMP = "Daitum.modelVisualisation.mapDisplay.CAMP" # Special - Empty/Null Icon NULL = ""