from __future__ import annotations import dash_mantine_components as dmc from dash import dcc from dash import html from core.dto import AngleData from core.dto import ContactData from core.dto import DistanceData from core.dto import FramingData from core.dto import InformationValueData from core.dto import ModalityColorData from core.dto import ModalityDepthData from core.dto import ModalityLightingData from core.dto import PointOfViewData from core.dto import SalienceData from core.dto import VisualSyntaxData def generate_visual_syntax_options_map(): """Generate map of titles and options for visual syntax labels.""" options_map = {} # add experiential labels options_map['visual syntax'] = VisualSyntaxData.list_fields() return options_map def generate_interpersonal_options_map(): """Generate map of titles and options for interpersonal labels.""" options_map = {} # add interpersonal labels options_map['contact'] = ContactData.list_fields() options_map['angle'] = AngleData.list_fields() options_map['point of view'] = PointOfViewData.list_fields() options_map['distance'] = DistanceData.list_fields() options_map['modality lighting'] = ModalityLightingData.list_fields() options_map['modality color'] = ModalityColorData.list_fields() options_map['modality depth'] = ModalityDepthData.list_fields() return options_map def generate_textual_options_map(): """Generate map of titles and options for textual labels.""" options_map = {} # add textual labels options_map['information value'] = InformationValueData.list_fields() options_map['framing'] = FramingData.list_fields() options_map['salience'] = SalienceData.list_fields() return options_map # prepare experiential container experiential_map = generate_visual_syntax_options_map() experiential_container = dmc.Col( children=[ html.H4('experiential'.title()), ], span=5, ) for title, options in experiential_map.items(): id_dict = {'type': 'annotation', 'index': title.replace('_', '-')} experiential_container.children.append( dmc.Container([ html.B(title.title()), dcc.RadioItems( options=[text.replace('_', ' ') for text in options], id=id_dict, ), ]), ) # prepare interpersonal container interpersonal_map = generate_interpersonal_options_map() interpersonal_container = dmc.Col( children=[ html.H4('interpersonal'.title()), ], span=3, ) for title, options in interpersonal_map.items(): id_dict = {'type': 'annotation', 'index': title.replace('_', '-')} interpersonal_container.children.append( dmc.Container([ html.B(title.title()), dcc.RadioItems( options=[text.replace('_', ' ') for text in options], id=id_dict, ), ]), ) # prepare textual container textual_map = generate_textual_options_map() textual_container = dmc.Col( children=[ html.H4('textual'.title()), ], span=4, ) for title, options in textual_map.items(): id_dict = {'type': 'annotation', 'index': title.replace('_', '-')} textual_container.children.append( dmc.Container([ html.B(title.title()), dcc.RadioItems( options=[text.replace('_', ' ') for text in options], id=id_dict, ), ]), ) labels_element = dmc.Grid( children=[ experiential_container, interpersonal_container, textual_container, ], )