|
|
@@ -1,1071 +1,1038 @@
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
-<!-- UI Layout Definition Format with Control Constraints and Views (v1.1) -->
|
|
|
+<!-- Enhanced UI Layout Definition Format Sample v1.3 -->
|
|
|
<ui-layout-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
xsi:schemaLocation="ui-layout-definition ui-layout-def.xsd"
|
|
|
- version="1.2">
|
|
|
+ version="1.3"
|
|
|
+ schema-version="1.3"
|
|
|
+ min-version="1.0"
|
|
|
+ max-version="2.0"
|
|
|
+ target-platform="avalonia"
|
|
|
+ accessibility-compliance="wcag-aa">
|
|
|
|
|
|
- <!-- Validation rules for control usage including includes -->
|
|
|
+ <!-- ENHANCED: v1.3 Validation Rules with Custom Validators and Profiles -->
|
|
|
<validation-rules>
|
|
|
+ <validation-include src="wcag-validation.xml" important="true" min-version="1.3" />
|
|
|
+ <validation-include src="performance-rules.xml" important="true" min-version="1.3" />
|
|
|
+ <validation-include src="security-rules.xml" important="true" min-version="1.3" />
|
|
|
+ <validation-include src="view-validation.xml" important="true" min-version="1.2" />
|
|
|
|
|
|
- <!-- External validation rule includes - loaded before local rules -->
|
|
|
- <validation-include src="base-validation-rules.xml" important="true" />
|
|
|
- <validation-include src="windows-validation-rules.xml" important="false" />
|
|
|
- <validation-include src="accessibility-rules.xml" important="false" />
|
|
|
- <validation-include src="performance-rules.xml" important="false" />
|
|
|
- <validation-include src="view-validation.xml" important="true" />
|
|
|
+ <!-- Custom Business Rule Validator -->
|
|
|
+ <custom-validator name="BusinessRuleValidator" version="1.0" category="business-rules">
|
|
|
+ <description>Validates business-specific constraints</description>
|
|
|
+ <implementation>
|
|
|
+ <script language="javascript">
|
|
|
+ function validate(element, context) {
|
|
|
+ // Custom validation logic
|
|
|
+ return element.hasAttribute('required') ? element.value.length > 0 : true;
|
|
|
+ }
|
|
|
+ </script>
|
|
|
+ </implementation>
|
|
|
+ <parameter name="strict-mode" type="bool" default-value="false" required="false"
|
|
|
+ description="Enable strict business rule validation" />
|
|
|
+ <test-case name="required-field" description="Should validate required fields">
|
|
|
+ <input><TextBox required="true" text="" /></input>
|
|
|
+ <expected-result>fail</expected-result>
|
|
|
+ <expected-message>Required field cannot be empty</expected-message>
|
|
|
+ </test-case>
|
|
|
+ </custom-validator>
|
|
|
|
|
|
- <!-- Include processing rules for validation:
|
|
|
- - important="true": Must be found and loaded, build fails if missing
|
|
|
- - important="false": Optional, warnings only if missing
|
|
|
- - Includes are processed in order before local rules
|
|
|
- - Local rules can override included rules
|
|
|
- - Rule conflicts resolved by last-loaded-wins principle
|
|
|
- - Rules with same name are merged (constraints combined)
|
|
|
- -->
|
|
|
-
|
|
|
- <!-- Local validation rules -->
|
|
|
- <rule name="control-definition-required">
|
|
|
- <description>All controls used in windows must be defined in patterns node or included files</description>
|
|
|
- <constraint>Every control element must reference a defined control or structure pattern from local or included definitions</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="pattern-include-validation">
|
|
|
- <description>Pattern includes must be valid and accessible</description>
|
|
|
- <constraint>Files marked important="true" must exist and be loadable</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="validation-include-validation">
|
|
|
- <description>Validation includes must be valid and accessible</description>
|
|
|
- <constraint>Validation files marked important="true" must exist and be loadable</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="view-window-consistency">
|
|
|
- <description>View-window relationships must be valid</description>
|
|
|
- <constraint>Windows referenced in views must exist and be properly associated</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="attribute-validation">
|
|
|
- <description>Control attributes must match pattern definitions</description>
|
|
|
- <constraint>Only attributes defined in control patterns (local or included) are allowed</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="container-children-validation">
|
|
|
- <description>Container controls must only contain allowed child types</description>
|
|
|
- <constraint>Child controls must be compatible with parent container per included definitions</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="required-attributes">
|
|
|
- <description>Required attributes must be specified</description>
|
|
|
- <constraint>Controls with required="true" attributes must have values</constraint>
|
|
|
- </rule>
|
|
|
-
|
|
|
- <rule name="include-precedence">
|
|
|
- <description>Pattern and validation override resolution order</description>
|
|
|
- <constraint>Local definitions override included definitions, later includes override earlier ones</constraint>
|
|
|
- </rule>
|
|
|
+ <!-- Production Validation Profile -->
|
|
|
+ <validation-profile name="ProductionProfile" version="1.0" target-platform="avalonia" enabled="true">
|
|
|
+ <description>Production-ready validation with accessibility and performance checks</description>
|
|
|
+ <profile-rule rule-name="BusinessRuleValidator" enabled="true" severity="error"
|
|
|
+ configuration="strict-mode=true" />
|
|
|
+ <profile-rule rule-name="accessibility-compliance" enabled="true" severity="warning" />
|
|
|
+ <profile-group group-name="performance-validation" enabled="true" override-severity="warning" />
|
|
|
+ <configuration stop-on-first-error="false" max-errors="100" parallel-execution="true" cache-results="true">
|
|
|
+ <setting key="accessibility-level" value="wcag-aa" scope="profile" />
|
|
|
+ <setting key="performance-threshold" value="2000ms" scope="profile" />
|
|
|
+ <exclusion pattern="*.test.xml" type="file" reason="Test files excluded from production validation" />
|
|
|
+ </configuration>
|
|
|
+ </validation-profile>
|
|
|
</validation-rules>
|
|
|
|
|
|
- <!-- Pattern definitions - must be first and only one patterns node -->
|
|
|
+ <!-- ENHANCED: v1.3 Pattern Definitions with Advanced Features -->
|
|
|
<patterns>
|
|
|
+ <pattern-include src="avalonia-controls.xml" important="true" platform="avalonia" min-version="1.3" />
|
|
|
+ <pattern-include src="accessibility-controls.xml" important="true" min-version="1.3" />
|
|
|
+ <pattern-include src="performance-controls.xml" important="false" min-version="1.3" />
|
|
|
|
|
|
- <!-- External pattern includes - loaded before local definitions -->
|
|
|
- <pattern-include src="windows-controls.xml" important="true" />
|
|
|
- <pattern-include src="KDE-controls.xml" important="false" />
|
|
|
- <pattern-include src="web-controls.xml" important="false" />
|
|
|
- <pattern-include src="mobile-controls.xml" important="false" />
|
|
|
-
|
|
|
- <!-- Include processing rules:
|
|
|
- - important="true": Must be found and loaded, build fails if missing
|
|
|
- - important="false": Optional, warnings only if missing
|
|
|
- - Includes are processed in order before local definitions
|
|
|
- - Local definitions can override included patterns
|
|
|
- - Naming conflicts resolved by last-loaded-wins principle
|
|
|
- -->
|
|
|
-
|
|
|
- <!-- Base wireframe layouts -->
|
|
|
- <wireframe name="StandardAppLayout" type="base-layout">
|
|
|
- <description>Standard application layout with header, sidebar, content, and footer</description>
|
|
|
- <template>
|
|
|
- <Panel name="rootContainer">
|
|
|
- <Panel name="headerPanel" height="60">
|
|
|
- <slot name="header-content" default="true">
|
|
|
- <Label name="appTitle" text="Application Title" />
|
|
|
- <slot name="header-actions" />
|
|
|
- </slot>
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="mainContainer" orientation="horizontal">
|
|
|
- <Panel name="sidebarPanel" width="250" visible="true">
|
|
|
- <slot name="sidebar-content" default="true">
|
|
|
- <Menu name="navigationMenu" orientation="vertical">
|
|
|
- <slot name="navigation-items" />
|
|
|
- </Menu>
|
|
|
- </slot>
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="contentPanel" fill="true">
|
|
|
- <slot name="main-content" required="true" />
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="footerPanel" height="30">
|
|
|
- <slot name="footer-content" default="true">
|
|
|
- <Label name="statusLabel" text="Ready" />
|
|
|
- </slot>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
- </template>
|
|
|
- </wireframe>
|
|
|
-
|
|
|
- <wireframe name="DialogLayout" type="base-layout">
|
|
|
- <description>Standard modal dialog layout</description>
|
|
|
- <template>
|
|
|
- <Panel name="dialogContainer">
|
|
|
- <Panel name="titleBar" height="40">
|
|
|
- <slot name="dialog-title" default="true">
|
|
|
- <Label name="titleLabel" text="Dialog" />
|
|
|
- </slot>
|
|
|
- <Button name="closeButton" text="×" style="borderless" />
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="dialogContent" padding="20">
|
|
|
- <slot name="dialog-body" required="true" />
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="buttonBar" height="50" alignment="right">
|
|
|
- <slot name="dialog-buttons" default="true">
|
|
|
- <Button name="okButton" text="OK" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- </slot>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
- </template>
|
|
|
- </wireframe>
|
|
|
-
|
|
|
- <wireframe name="FormLayout" type="base-layout">
|
|
|
- <description>Standard form layout with sections</description>
|
|
|
- <template>
|
|
|
- <Panel name="formContainer">
|
|
|
- <slot name="form-header" />
|
|
|
-
|
|
|
- <Panel name="formSections">
|
|
|
- <slot name="form-content" required="true" />
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="formActions" alignment="right">
|
|
|
- <slot name="form-buttons" default="true">
|
|
|
- <Button name="saveButton" text="Save" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- </slot>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
- </template>
|
|
|
- </wireframe>
|
|
|
-
|
|
|
- <!-- Base control definitions with constraints -->
|
|
|
- <control name="Label" type="display" category="basic">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormField,Menu</allowed-parents>
|
|
|
- <allowed-children>none</allowed-children>
|
|
|
- <container>false</container>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="text" type="string" default="" required="false" />
|
|
|
- <attribute name="font-size" type="int" default="12" min="8" max="72" />
|
|
|
- <attribute name="color" type="color" default="#000000" />
|
|
|
- <attribute name="alignment" type="enum" values="left,center,right" default="left" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="click" />
|
|
|
- </behavior>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="TextBox" type="input" category="input">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormField</allowed-parents>
|
|
|
- <allowed-children>none</allowed-children>
|
|
|
- <container>false</container>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="value" type="string" default="" />
|
|
|
- <attribute name="placeholder" type="string" default="" />
|
|
|
- <attribute name="max-length" type="int" default="255" min="1" max="10000" />
|
|
|
- <attribute name="readonly" type="bool" default="false" />
|
|
|
- <attribute name="multiline" type="bool" default="false" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="text-changed" />
|
|
|
- <event name="focus" />
|
|
|
- <event name="blur" />
|
|
|
- </behavior>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="ComboBox" type="input" category="input">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormField</allowed-parents>
|
|
|
- <allowed-children>items</allowed-children>
|
|
|
- <container>false</container>
|
|
|
- <requires-structure>items</requires-structure>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="selected-value" type="string" default="" />
|
|
|
- <attribute name="editable" type="bool" default="false" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="selection-changed" />
|
|
|
- </behavior>
|
|
|
- <structure>
|
|
|
- <items min-count="0" max-count="unlimited">
|
|
|
- <item value="" text="" />
|
|
|
- </items>
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="Button" type="action" category="action">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormField,ButtonBar</allowed-parents>
|
|
|
- <allowed-children>none</allowed-children>
|
|
|
- <container>false</container>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="text" type="string" default="Button" required="true" />
|
|
|
- <attribute name="enabled" type="bool" default="true" />
|
|
|
- <attribute name="style" type="enum" values="normal,primary,secondary,danger,borderless" default="normal" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="click" required="true" />
|
|
|
- </behavior>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="Panel" type="container" category="layout">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,window,wireframe-instance</allowed-parents>
|
|
|
- <allowed-children>any-control</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <max-children>unlimited</max-children>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="border" type="bool" default="false" />
|
|
|
- <attribute name="background-color" type="color" default="transparent" />
|
|
|
- <attribute name="padding" type="int" default="0" min="0" max="50" />
|
|
|
- <attribute name="orientation" type="enum" values="horizontal,vertical" default="vertical" />
|
|
|
- <attribute name="alignment" type="enum" values="left,center,right,stretch" default="left" />
|
|
|
- <attribute name="fill" type="bool" default="false" />
|
|
|
- <attribute name="width" type="int" min="10" max="2000" />
|
|
|
- <attribute name="height" type="int" min="10" max="2000" />
|
|
|
- <attribute name="visible" type="bool" default="true" />
|
|
|
- </attributes>
|
|
|
- <structure>
|
|
|
- <children allow-multiple="true" />
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="PopupPanel" type="container" category="layout" inherits="Panel">
|
|
|
+ <!-- Enhanced Control with v1.3 Features -->
|
|
|
+ <control name="EnhancedDataGrid" type="data" category="avalonia-data" schema-version="1.3">
|
|
|
+ <description>High-performance data grid with virtualization and accessibility</description>
|
|
|
<constraints>
|
|
|
- <allowed-parents>window</allowed-parents>
|
|
|
- <allowed-children>any-control</allowed-children>
|
|
|
+ <allowed-parents>Panel,ScrollViewer,Border</allowed-parents>
|
|
|
+ <allowed-children>columns</allowed-children>
|
|
|
<container>true</container>
|
|
|
+ <platform-constraints>
|
|
|
+ <platform-constraint platform="avalonia" min-version="11.0" feature-required="virtualization" />
|
|
|
+ </platform-constraints>
|
|
|
+ <performance-hints virtualization-supported="true" memory-intensive="true"
|
|
|
+ recommended-max-items="10000" />
|
|
|
</constraints>
|
|
|
<attributes>
|
|
|
- <attribute name="modal" type="bool" default="true" />
|
|
|
- <attribute name="visible" type="bool" default="false" />
|
|
|
- <attribute name="position" type="enum" values="center,cursor,custom" default="center" />
|
|
|
+ <attribute name="items-source" type="binding" default="" category="data"
|
|
|
+ description="Collection of items to display" />
|
|
|
+ <attribute name="virtualization-enabled" type="bool" default="true" category="performance"
|
|
|
+ description="Enable row virtualization for large datasets" />
|
|
|
+ <attribute name="accessibility-mode" type="enum" values="standard,enhanced,full" default="enhanced"
|
|
|
+ category="accessibility" description="Level of accessibility support" />
|
|
|
+ <attribute name="performance-mode" type="enum" values="standard,optimized,maximum" default="optimized"
|
|
|
+ category="performance" description="Performance optimization level" />
|
|
|
</attributes>
|
|
|
+ <validation>
|
|
|
+ <rule name="max-columns" type="range" pattern="count(columns/column) <= 50"
|
|
|
+ message="Maximum 50 columns allowed for performance" severity="warning" />
|
|
|
+ <rule name="accessibility-headers" type="custom" message="Column headers required for accessibility"
|
|
|
+ severity="error" />
|
|
|
+ </validation>
|
|
|
+ <accessibility>
|
|
|
+ <requirement standard="wcag" level="aa" description="Table headers and navigation" required="true" />
|
|
|
+ <requirement standard="section-508" level="aa" description="Keyboard navigation support" required="true" />
|
|
|
+ </accessibility>
|
|
|
+ <data-binding supports-two-way="true" supports-commands="true" supports-validation="true">
|
|
|
+ <bindable-property name="ItemsSource" type="collection" mode="OneWay" dependency-property="true" />
|
|
|
+ <bindable-property name="SelectedItem" type="object" mode="TwoWay" dependency-property="true" />
|
|
|
+ <bindable-property name="IsLoading" type="bool" mode="OneWay" default-value="false" />
|
|
|
+ </data-binding>
|
|
|
<behavior>
|
|
|
- <event name="opened" />
|
|
|
- <event name="closed" />
|
|
|
+ <event name="selection-changed" async="false" accessibility-event="true" />
|
|
|
+ <event name="loading-started" async="true" />
|
|
|
+ <event name="loading-completed" async="true" />
|
|
|
+ <command name="RefreshCommand" can-execute-property="CanRefresh" async="true" />
|
|
|
+ <gesture name="swipe-refresh" type="swipe" platform-specific="mobile" />
|
|
|
</behavior>
|
|
|
</control>
|
|
|
|
|
|
- <control name="Menu" type="navigation" category="navigation">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel</allowed-parents>
|
|
|
- <allowed-children>menu-items</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <requires-structure>menu-items</requires-structure>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="orientation" type="enum" values="horizontal,vertical" default="horizontal" />
|
|
|
- </attributes>
|
|
|
- <structure>
|
|
|
- <menu-items min-count="1" max-count="unlimited">
|
|
|
- <menu-item text="" action="" shortcut="" separator="false" />
|
|
|
- </menu-items>
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="ListView" type="data" category="data">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel</allowed-parents>
|
|
|
- <allowed-children>columns,items</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <requires-structure>columns</requires-structure>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="view-mode" type="enum" values="list,details,icons" default="list" />
|
|
|
- <attribute name="multi-select" type="bool" default="false" />
|
|
|
- <attribute name="sort-column" type="string" default="" />
|
|
|
- <attribute name="sort-direction" type="enum" values="asc,desc" default="asc" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="selection-changed" />
|
|
|
- <event name="item-double-click" />
|
|
|
- </behavior>
|
|
|
- <structure>
|
|
|
- <columns min-count="1" max-count="20">
|
|
|
- <column name="" text="" width="" sortable="true" />
|
|
|
- </columns>
|
|
|
- <items min-count="0" max-count="unlimited">
|
|
|
- <item>
|
|
|
- <values>
|
|
|
- <value column="" text="" />
|
|
|
- </values>
|
|
|
- </item>
|
|
|
- </items>
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="TreeView" type="data" category="data">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel</allowed-parents>
|
|
|
- <allowed-children>nodes</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <requires-structure>nodes</requires-structure>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="show-lines" type="bool" default="true" />
|
|
|
- <attribute name="show-root-lines" type="bool" default="true" />
|
|
|
- <attribute name="checkboxes" type="bool" default="false" />
|
|
|
- </attributes>
|
|
|
- <behavior>
|
|
|
- <event name="node-selected" />
|
|
|
- <event name="node-expanded" />
|
|
|
- <event name="node-collapsed" />
|
|
|
- </behavior>
|
|
|
- <structure>
|
|
|
- <nodes min-count="0" max-count="unlimited">
|
|
|
- <node text="" value="" expanded="false" checked="false">
|
|
|
- <nodes max-depth="10">
|
|
|
- <!-- Recursive node structure with depth limit -->
|
|
|
- </nodes>
|
|
|
- </node>
|
|
|
- </nodes>
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <!-- Additional specialized controls -->
|
|
|
- <control name="TabControl" type="container" category="layout">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel</allowed-parents>
|
|
|
- <allowed-children>tab</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <requires-structure>tabs</requires-structure>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="selected-tab" type="string" default="" />
|
|
|
- <attribute name="tab-position" type="enum" values="top,bottom,left,right" default="top" />
|
|
|
- </attributes>
|
|
|
- <structure>
|
|
|
- <tabs min-count="1" max-count="20">
|
|
|
- <tab name="" text="" visible="true" enabled="true">
|
|
|
- <!-- Tab content can contain any controls -->
|
|
|
- </tab>
|
|
|
- </tabs>
|
|
|
- </structure>
|
|
|
- </control>
|
|
|
-
|
|
|
- <control name="ButtonBar" type="container" category="layout">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormField</allowed-parents>
|
|
|
- <allowed-children>Button</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <max-children>10</max-children>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="alignment" type="enum" values="left,center,right" default="right" />
|
|
|
- <attribute name="spacing" type="int" default="5" min="0" max="20" />
|
|
|
- </attributes>
|
|
|
- </control>
|
|
|
-
|
|
|
- <!-- Custom pattern with constraints -->
|
|
|
- <structure name="FormField" type="pattern" category="composite">
|
|
|
- <constraints>
|
|
|
- <allowed-parents>Panel,FormLayout</allowed-parents>
|
|
|
- <allowed-children>Label,TextBox,ComboBox,Button</allowed-children>
|
|
|
- <container>true</container>
|
|
|
- <required-slots>input</required-slots>
|
|
|
- </constraints>
|
|
|
- <attributes>
|
|
|
- <attribute name="label-text" type="string" required="true" />
|
|
|
- <attribute name="required" type="bool" default="false" />
|
|
|
- <attribute name="validation-message" type="string" default="" />
|
|
|
- </attributes>
|
|
|
+ <!-- Responsive Layout Wireframe -->
|
|
|
+ <wireframe name="ResponsiveAppLayout" type="base-layout" schema-version="1.3">
|
|
|
+ <description>Responsive application layout with accessibility and performance optimization</description>
|
|
|
+ <responsive>
|
|
|
+ <breakpoint name="mobile" max-width="768" orientation="any" template-override="MobileLayout" />
|
|
|
+ <breakpoint name="tablet" min-width="769" max-width="1024" orientation="any" />
|
|
|
+ <breakpoint name="desktop" min-width="1025" orientation="any" />
|
|
|
+ </responsive>
|
|
|
+ <theme-support>
|
|
|
+ <theme-variant name="light" type="light" />
|
|
|
+ <theme-variant name="dark" type="dark" />
|
|
|
+ <theme-variant name="high-contrast" type="high-contrast" resource-override="hc-resources.xml" />
|
|
|
+ </theme-support>
|
|
|
<template>
|
|
|
- <Panel name="fieldContainer">
|
|
|
- <Label name="fieldLabel" text="{label-text}" />
|
|
|
- <slot name="input" allowed-controls="TextBox,ComboBox,Button" required="true" />
|
|
|
- <Label name="validationLabel" text="{validation-message}" visible="false" color="#ff0000" />
|
|
|
- </Panel>
|
|
|
+ <Grid name="rootContainer">
|
|
|
+ <grid-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" shared-size-group="Header" />
|
|
|
+ <row-definition height="*" />
|
|
|
+ <row-definition height="Auto" shared-size-group="Footer" />
|
|
|
+ </row-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="Auto" min-width="200" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ </column-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <slot name="header-content" grid-row="0" grid-column="0" grid-column-span="2"
|
|
|
+ accessibility-landmark="banner" />
|
|
|
+ <slot name="sidebar-content" grid-row="1" grid-column="0"
|
|
|
+ accessibility-landmark="navigation" conditional="screen-width > 768" />
|
|
|
+ <slot name="main-content" grid-row="1" grid-column="1" required="true"
|
|
|
+ accessibility-landmark="main" />
|
|
|
+ <slot name="footer-content" grid-row="2" grid-column="0" grid-column-span="2"
|
|
|
+ accessibility-landmark="contentinfo" />
|
|
|
+ </Grid>
|
|
|
</template>
|
|
|
- </structure>
|
|
|
-
|
|
|
+ </wireframe>
|
|
|
</patterns>
|
|
|
|
|
|
- <!-- NEW: View definitions with external includes -->
|
|
|
+ <!-- ENHANCED: v1.3 Advanced View Definitions -->
|
|
|
<views>
|
|
|
+ <view-include src="business-views.xml" important="true" min-version="1.2" />
|
|
|
|
|
|
- <!-- External view includes - loaded before local view definitions -->
|
|
|
- <view-include src="business-views.xml" important="true" />
|
|
|
- <view-include src="admin-views.xml" important="false" />
|
|
|
-
|
|
|
- <!-- Base Application View -->
|
|
|
- <view name="BaseApplicationView" type="base" category="framework">
|
|
|
- <description>Base view for all application windows with common functionality</description>
|
|
|
+ <!-- Modern AI-Enhanced Application View -->
|
|
|
+ <view name="ModernDashboardView" type="ai-assisted" category="ai-enhanced"
|
|
|
+ schema-version="1.3" platform="avalonia" singleton="true" lazy-loading="false"
|
|
|
+ cacheable="true" priority="high">
|
|
|
+ <description>AI-enhanced dashboard with real-time analytics and collaboration</description>
|
|
|
|
|
|
<metadata>
|
|
|
- <permissions>app.access</permissions>
|
|
|
+ <model-class>DashboardModel</model-class>
|
|
|
+ <view-model-class>ModernDashboardViewModel</view-model-class>
|
|
|
+ <controller-class>DashboardController</controller-class>
|
|
|
+ <permissions>dashboard.read,analytics.view,ai.interact</permissions>
|
|
|
+ <author>Development Team</author>
|
|
|
+ <version>2.0.0</version>
|
|
|
+ <created-date>2024-01-15</created-date>
|
|
|
+ <modified-date>2024-03-10</modified-date>
|
|
|
+ <documentation-url>https://docs.company.com/dashboard</documentation-url>
|
|
|
+ <tags>
|
|
|
+ <tag>ai-enhanced</tag>
|
|
|
+ <tag>real-time</tag>
|
|
|
+ <tag>analytics</tag>
|
|
|
+ <tag>collaborative</tag>
|
|
|
+ </tags>
|
|
|
</metadata>
|
|
|
|
|
|
- <data-context>
|
|
|
- <property name="currentUser" type="User" scope="global" />
|
|
|
- <property name="applicationSettings" type="AppSettings" scope="global" />
|
|
|
- <property name="isLoading" type="bool" scope="view" />
|
|
|
- </data-context>
|
|
|
+ <!-- Advanced State Management -->
|
|
|
+ <state-management pattern="redux" persistence="distributed">
|
|
|
+ <state name="initializing" initial="true" data-snapshot="InitializingState"
|
|
|
+ description="Loading dashboard components" />
|
|
|
+ <state name="loading-data" final="false" data-snapshot="LoadingState"
|
|
|
+ description="Fetching analytics data" />
|
|
|
+ <state name="ready" final="false" data-snapshot="ReadyState"
|
|
|
+ description="Dashboard fully loaded and interactive" />
|
|
|
+ <state name="ai-processing" final="false" data-snapshot="AIProcessingState"
|
|
|
+ description="AI analysis in progress" />
|
|
|
+ <state name="error" final="false" data-snapshot="ErrorState"
|
|
|
+ description="Error state with recovery options" />
|
|
|
+
|
|
|
+ <transition from="initializing" to="loading-data" trigger="components-loaded"
|
|
|
+ condition="user.isAuthenticated" action="startDataLoad" />
|
|
|
+ <transition from="loading-data" to="ready" trigger="data-loaded"
|
|
|
+ condition="data.isValid && data.count > 0" action="finalizeLoad" />
|
|
|
+ <transition from="ready" to="ai-processing" trigger="ai-analysis-requested"
|
|
|
+ action="startAIAnalysis" />
|
|
|
+ <transition from="ai-processing" to="ready" trigger="ai-analysis-complete"
|
|
|
+ action="displayAIResults" />
|
|
|
+ <transition from="*" to="error" trigger="critical-error" action="handleError" />
|
|
|
+ </state-management>
|
|
|
|
|
|
- <behaviors>
|
|
|
- <behavior name="show-loading" scope="view" />
|
|
|
- <behavior name="hide-loading" scope="view" />
|
|
|
- <behavior name="show-error" scope="view" />
|
|
|
- <behavior name="log-action" scope="global" />
|
|
|
- </behaviors>
|
|
|
- </view>
|
|
|
-
|
|
|
- <!-- Main Application View -->
|
|
|
- <view name="MainApplicationView" type="dashboard" category="core" inherits="BaseApplicationView">
|
|
|
- <description>Main application dashboard with navigation and overview</description>
|
|
|
+ <!-- Comprehensive Accessibility -->
|
|
|
+ <accessibility level="aaa" tested="true">
|
|
|
+ <compliance standard="wcag" level="aaa" verified="true" />
|
|
|
+ <compliance standard="section-508" level="aa" verified="true" />
|
|
|
+ <compliance standard="ada" level="aa" verified="false" />
|
|
|
+ <feature name="screen-reader" type="screen-reader" required="true"
|
|
|
+ implementation="Full NVDA, JAWS, and VoiceOver compatibility" />
|
|
|
+ <feature name="voice-control" type="voice-control" required="false"
|
|
|
+ implementation="Dragon NaturallySpeaking and Windows Speech Recognition" />
|
|
|
+ <feature name="high-contrast" type="high-contrast" required="true"
|
|
|
+ implementation="Windows High Contrast and custom themes" />
|
|
|
+ <feature name="magnification" type="magnification" required="true"
|
|
|
+ implementation="Support for 200-500% zoom levels" />
|
|
|
+ <feature name="eye-tracking" type="eye-tracking" required="false"
|
|
|
+ implementation="Tobii Eye Tracker integration" />
|
|
|
+ </accessibility>
|
|
|
|
|
|
- <metadata>
|
|
|
- <view-model-class>MainApplicationViewModel</view-model-class>
|
|
|
- <controller-class>MainApplicationController</controller-class>
|
|
|
- <permissions>app.main,dashboard.view</permissions>
|
|
|
- </metadata>
|
|
|
+ <!-- Performance Optimization -->
|
|
|
+ <performance target-load-time="1000" memory-limit="150MB">
|
|
|
+ <metric name="first-contentful-paint" type="load-time" target="800ms" critical="true" />
|
|
|
+ <metric name="time-to-interactive" type="load-time" target="1200ms" critical="true" />
|
|
|
+ <metric name="memory-usage" type="memory-usage" target="100MB" critical="false" />
|
|
|
+ <metric name="cpu-usage" type="cpu-usage" target="5%" critical="false" />
|
|
|
+ <metric name="frame-rate" type="frame-rate" target="60fps" critical="false" />
|
|
|
+
|
|
|
+ <optimization technique="lazy-loading" description="Load widgets on demand" impact="high" />
|
|
|
+ <optimization technique="virtualization" description="Virtualize large data grids" impact="high" />
|
|
|
+ <optimization technique="caching" description="Cache dashboard configurations" impact="medium" />
|
|
|
+ <optimization technique="code-splitting" description="Split AI components separately" impact="medium" />
|
|
|
+ <optimization technique="preloading" description="Preload critical dashboard data" impact="low" />
|
|
|
+ </performance>
|
|
|
|
|
|
+ <!-- Security Framework -->
|
|
|
+ <security level="high" audit-required="true">
|
|
|
+ <permission name="dashboard-read" type="read" required="true" scope="view" />
|
|
|
+ <permission name="analytics-access" type="read" required="true" scope="data" />
|
|
|
+ <permission name="ai-interact" type="execute" required="false" scope="global" />
|
|
|
+ <permission name="export-data" type="custom" required="false" scope="data" />
|
|
|
+
|
|
|
+ <vulnerability-protection type="xss" protection="input-sanitization" severity="high" />
|
|
|
+ <vulnerability-protection type="injection" protection="parameterized-queries" severity="critical" />
|
|
|
+ <vulnerability-protection type="csrf" protection="anti-forgery-tokens" severity="high" />
|
|
|
+ <vulnerability-protection type="data-exposure" protection="data-masking" severity="medium" />
|
|
|
+
|
|
|
+ <data-protection encryption="true" gdpr-compliant="true" />
|
|
|
+ </security>
|
|
|
+
|
|
|
+ <!-- Advanced Localization -->
|
|
|
+ <localization default-culture="en-US" fallback-culture="en" rtl-support="true">
|
|
|
+ <supported-culture code="ar-SA" name="Arabic (Saudi Arabia)" completion="85" verified="false" />
|
|
|
+ <supported-culture code="he-IL" name="Hebrew (Israel)" completion="90" verified="true" />
|
|
|
+ <supported-culture code="zh-CN" name="Chinese (Simplified)" completion="95" verified="true" />
|
|
|
+ <supported-culture code="ja-JP" name="Japanese" completion="80" verified="false" />
|
|
|
+ <supported-culture code="de-DE" name="German" completion="100" verified="true" />
|
|
|
+
|
|
|
+ <resource-bundle name="DashboardResources" path="Resources/Dashboard" type="resx" />
|
|
|
+ <resource-bundle name="AIResources" path="Resources/AI" type="json" />
|
|
|
+ <resource-bundle name="CommonResources" path="Resources/Common" type="resx" />
|
|
|
+ </localization>
|
|
|
+
|
|
|
+ <!-- Comprehensive Testing -->
|
|
|
+ <testing coverage-target="95" strategy="e2e">
|
|
|
+ <test-scenario name="dashboard-load" type="functional" priority="critical" automated="true">
|
|
|
+ <step action="navigate-to-dashboard" expected="dashboard-container-visible" />
|
|
|
+ <step action="wait-for-data-load" expected="charts-populated" />
|
|
|
+ <step action="verify-ai-suggestions" expected="ai-panel-active" />
|
|
|
+ </test-scenario>
|
|
|
+
|
|
|
+ <test-scenario name="accessibility-navigation" type="accessibility" priority="high" automated="true">
|
|
|
+ <step action="tab-through-controls" expected="all-interactive-elements-reachable" />
|
|
|
+ <step action="screen-reader-announcements" expected="proper-aria-labels-announced" />
|
|
|
+ <step action="high-contrast-mode" expected="all-content-visible" />
|
|
|
+ </test-scenario>
|
|
|
+
|
|
|
+ <test-scenario name="performance-benchmark" type="performance" priority="high" automated="true">
|
|
|
+ <step action="measure-load-time" expected="under-1000ms" />
|
|
|
+ <step action="measure-memory-usage" expected="under-150mb" />
|
|
|
+ <step action="measure-frame-rate" expected="above-30fps" />
|
|
|
+ </test-scenario>
|
|
|
+
|
|
|
+ <test-scenario name="ai-interaction" type="functional" priority="medium" automated="true">
|
|
|
+ <step action="request-ai-analysis" expected="ai-processing-indicator-shown" />
|
|
|
+ <step action="wait-for-ai-results" expected="insights-displayed" />
|
|
|
+ <step action="interact-with-suggestions" expected="actions-executed" />
|
|
|
+ </test-scenario>
|
|
|
+
|
|
|
+ <automation framework="playwright" selector-strategy="accessibility" page-object-model="true" />
|
|
|
+ </testing>
|
|
|
+
|
|
|
+ <!-- Dependencies -->
|
|
|
<dependencies>
|
|
|
- <view-ref name="UserManagementView" relationship="reference" required="false">
|
|
|
- <interaction type="manage-users" />
|
|
|
- </view-ref>
|
|
|
- <view-ref name="SettingsView" relationship="reference" required="false">
|
|
|
- <interaction type="configure-app" />
|
|
|
- </view-ref>
|
|
|
- <shared-component name="NotificationService" required="true" />
|
|
|
- <shared-component name="SecurityService" required="true" />
|
|
|
+ <service-ref name="DashboardService" interface="IDashboardService" scope="scoped" required="true" />
|
|
|
+ <service-ref name="AIAnalyticsService" interface="IAIService" scope="singleton" required="false" />
|
|
|
+ <service-ref name="NotificationService" interface="INotificationService" scope="transient" required="true" />
|
|
|
+ <library-ref name="ChartingLibrary" version="3.2.1" source="nuget" optional="false" />
|
|
|
+ <library-ref name="AILibrary" version="1.5.0" source="internal" optional="true" />
|
|
|
</dependencies>
|
|
|
|
|
|
+ <!-- Data Context -->
|
|
|
<data-context>
|
|
|
- <property name="dashboardData" type="DashboardData" scope="view" />
|
|
|
- <property name="recentItems" type="RecentItemsList" scope="view" />
|
|
|
- <property name="notifications" type="NotificationList" scope="view" />
|
|
|
+ <property name="dashboardData" type="DashboardData" scope="view" nullable="false"
|
|
|
+ validation="NotNull" observable="true" />
|
|
|
+ <property name="aiInsights" type="AIInsightCollection" scope="view" nullable="true"
|
|
|
+ default-value="null" observable="true" />
|
|
|
+ <property name="userPreferences" type="UserPreferences" scope="session" nullable="false"
|
|
|
+ persistent="true" observable="true" />
|
|
|
+ <property name="realTimeData" type="RealTimeDataStream" scope="distributed" nullable="true"
|
|
|
+ observable="true" />
|
|
|
</data-context>
|
|
|
|
|
|
+ <!-- Windows -->
|
|
|
<windows>
|
|
|
- <window-ref name="MainWindow" role="main" default="true" />
|
|
|
+ <window-ref name="MainDashboard" role="main" default="true" lazy-load="false"
|
|
|
+ cache-lifetime="3600" priority="critical" />
|
|
|
+ <window-ref name="AIInsightsPanel" role="preview" default="false" lazy-load="true"
|
|
|
+ priority="normal" />
|
|
|
+ <window-ref name="SettingsDialog" role="utility" default="false" lazy-load="true"
|
|
|
+ priority="low" />
|
|
|
</windows>
|
|
|
|
|
|
+ <!-- Navigation -->
|
|
|
<navigation>
|
|
|
- <action name="show-dashboard" target="MainWindow" />
|
|
|
- <action name="show-users" target="UserManagementView" />
|
|
|
- <action name="show-settings" target="SettingsView" />
|
|
|
- <action name="show-reports" target="MainWindow" context="reportsPanel" />
|
|
|
+ <action name="show-dashboard" target="MainDashboard" async="false"
|
|
|
+ confirmation-required="false" permission="dashboard-read" />
|
|
|
+ <action name="show-ai-insights" target="AIInsightsPanel" async="true"
|
|
|
+ confirmation-required="false" permission="ai-interact" />
|
|
|
+ <action name="export-data" target="MainDashboard" async="true"
|
|
|
+ confirmation-required="true" permission="export-data" />
|
|
|
+ <action name="show-settings" target="SettingsDialog" async="false"
|
|
|
+ confirmation-required="false" />
|
|
|
</navigation>
|
|
|
|
|
|
+ <!-- Behaviors -->
|
|
|
<behaviors>
|
|
|
- <behavior name="refresh-dashboard" scope="view" />
|
|
|
- <behavior name="load-recent-items" scope="view" />
|
|
|
- <behavior name="check-notifications" scope="view" />
|
|
|
+ <behavior name="refresh-dashboard" scope="view" async="true" debounce="1000" cancellable="true" />
|
|
|
+ <behavior name="ai-analyze" scope="view" async="true" throttle="5000" cancellable="true" />
|
|
|
+ <behavior name="save-preferences" scope="session" async="false" />
|
|
|
+ <behavior name="export-dashboard" scope="application" async="true" cancellable="true" />
|
|
|
</behaviors>
|
|
|
|
|
|
+ <!-- Communication -->
|
|
|
<communication>
|
|
|
<publishes>
|
|
|
- <event name="dashboard-loaded" data="dashboard-id" />
|
|
|
- <event name="user-activity" data="activity-type,timestamp" />
|
|
|
+ <event name="dashboard-loaded" data="dashboard-id,load-time" async="false"
|
|
|
+ broadcast="false" persistent="false" />
|
|
|
+ <event name="ai-analysis-requested" data="analysis-type,parameters" async="true"
|
|
|
+ broadcast="true" persistent="true" />
|
|
|
+ <event name="data-exported" data="export-format,file-path" async="false"
|
|
|
+ broadcast="false" persistent="true" />
|
|
|
</publishes>
|
|
|
+
|
|
|
<subscribes>
|
|
|
- <event name="user-logged-in" source="SecurityService" handler="refresh-dashboard" />
|
|
|
- <event name="settings-changed" source="SettingsView" handler="apply-settings" />
|
|
|
+ <event name="data-updated" source="DataService" handler="refresh-dashboard"
|
|
|
+ async="true" debounce="2000" filter="dashboard-relevant" />
|
|
|
+ <event name="user-preferences-changed" source="SettingsView" handler="apply-preferences"
|
|
|
+ async="false" />
|
|
|
+ <event name="ai-model-updated" source="AIService" handler="refresh-ai-capabilities"
|
|
|
+ async="true" />
|
|
|
</subscribes>
|
|
|
+
|
|
|
+ <real-time>
|
|
|
+ <connection name="dashboard-updates" protocol="signalr" endpoint="/dashboardHub"
|
|
|
+ auto-reconnect="true" />
|
|
|
+ <connection name="ai-stream" protocol="websocket" endpoint="/ai-insights"
|
|
|
+ auto-reconnect="true" />
|
|
|
+ </real-time>
|
|
|
</communication>
|
|
|
</view>
|
|
|
-
|
|
|
- <!-- User Management View -->
|
|
|
- <view name="UserManagementView" type="business-entity" category="admin" inherits="BaseApplicationView">
|
|
|
- <description>User account management including creation, editing, and permissions</description>
|
|
|
-
|
|
|
- <metadata>
|
|
|
- <model-class>User</model-class>
|
|
|
- <view-model-class>UserManagementViewModel</view-model-class>
|
|
|
- <controller-class>UserController</controller-class>
|
|
|
- <permissions>user.read,user.write,user.admin</permissions>
|
|
|
- </metadata>
|
|
|
-
|
|
|
- <data-context>
|
|
|
- <property name="currentUser" type="User" scope="view" />
|
|
|
- <property name="userList" type="UserList" scope="view" />
|
|
|
- <property name="selectedUsers" type="UserList" scope="view" />
|
|
|
- <property name="userRoles" type="RoleList" scope="view" />
|
|
|
- </data-context>
|
|
|
-
|
|
|
- <windows>
|
|
|
- <window-ref name="UserListWindow" role="main" default="true" />
|
|
|
- <window-ref name="UserEditDialog" role="editor" modal="true" />
|
|
|
- <window-ref name="UserPermissionsDialog" role="utility" modal="true" />
|
|
|
- </windows>
|
|
|
-
|
|
|
- <navigation>
|
|
|
- <action name="show-user-list" target="UserListWindow" />
|
|
|
- <action name="edit-user" target="UserEditDialog" context="currentUser" />
|
|
|
- <action name="create-user" target="UserEditDialog" />
|
|
|
- <action name="manage-permissions" target="UserPermissionsDialog" context="currentUser" />
|
|
|
- </navigation>
|
|
|
-
|
|
|
- <behaviors>
|
|
|
- <behavior name="refresh-users" scope="view" />
|
|
|
- <behavior name="validate-user" scope="view" />
|
|
|
- <behavior name="save-user" scope="view" />
|
|
|
- <behavior name="delete-user" scope="view" />
|
|
|
- <behavior name="reset-password" scope="view" />
|
|
|
- </behaviors>
|
|
|
-
|
|
|
- <communication>
|
|
|
- <publishes>
|
|
|
- <event name="user-created" data="user-id" />
|
|
|
- <event name="user-updated" data="user-id" />
|
|
|
- <event name="user-deleted" data="user-id" />
|
|
|
- </publishes>
|
|
|
- </communication>
|
|
|
- </view>
|
|
|
-
|
|
|
- <!-- Settings View -->
|
|
|
- <view name="SettingsView" type="utility" category="system" inherits="BaseApplicationView">
|
|
|
- <description>Application configuration and user preferences</description>
|
|
|
-
|
|
|
- <metadata>
|
|
|
- <model-class>ApplicationSettings</model-class>
|
|
|
- <view-model-class>SettingsViewModel</view-model-class>
|
|
|
- <controller-class>SettingsController</controller-class>
|
|
|
- <permissions>settings.read,settings.write</permissions>
|
|
|
- </metadata>
|
|
|
-
|
|
|
- <data-context>
|
|
|
- <property name="currentSettings" type="ApplicationSettings" scope="view" />
|
|
|
- <property name="userPreferences" type="UserPreferences" scope="view" />
|
|
|
- <property name="systemInfo" type="SystemInfo" scope="view" />
|
|
|
- </data-context>
|
|
|
-
|
|
|
- <windows>
|
|
|
- <window-ref name="SettingsWindow" role="main" default="true" />
|
|
|
- </windows>
|
|
|
-
|
|
|
- <navigation>
|
|
|
- <action name="show-settings" target="SettingsWindow" />
|
|
|
- <action name="reset-to-defaults" target="SettingsWindow" />
|
|
|
- </navigation>
|
|
|
-
|
|
|
- <behaviors>
|
|
|
- <behavior name="load-settings" scope="view" />
|
|
|
- <behavior name="save-settings" scope="view" />
|
|
|
- <behavior name="validate-settings" scope="view" />
|
|
|
- <behavior name="export-settings" scope="view" />
|
|
|
- <behavior name="import-settings" scope="view" />
|
|
|
- </behaviors>
|
|
|
-
|
|
|
- <communication>
|
|
|
- <publishes>
|
|
|
- <event name="settings-changed" data="setting-category" />
|
|
|
- <event name="settings-saved" data="timestamp" />
|
|
|
- </publishes>
|
|
|
- </communication>
|
|
|
- </view>
|
|
|
-
|
|
|
</views>
|
|
|
|
|
|
- <!-- Window definitions with view associations and wireframe inheritance -->
|
|
|
- <window name="MainWindow" title="Main Application" wireframe="StandardAppLayout" view="MainApplicationView">
|
|
|
+ <!-- ENHANCED: Window Includes with Conditional Loading -->
|
|
|
+ <window-includes>
|
|
|
+ <window-include src="avalonia-windows.xml" important="true" platform="avalonia" min-version="1.3" />
|
|
|
+ <window-include src="accessibility-windows.xml" important="false" min-version="1.3" />
|
|
|
+ <window-include src="mobile-responsive-windows.xml" important="false" platform="mobile" />
|
|
|
+ </window-includes>
|
|
|
+
|
|
|
+ <!-- ENHANCED: Modern Dashboard Window with v1.3 Features -->
|
|
|
+ <window name="MainDashboard" title="AI-Enhanced Analytics Dashboard"
|
|
|
+ wireframe="ResponsiveAppLayout" view="ModernDashboardView"
|
|
|
+ target-platform="avalonia" schema-version="1.3">
|
|
|
+
|
|
|
<attributes>
|
|
|
- <attribute name="width" value="1200" />
|
|
|
- <attribute name="height" value="800" />
|
|
|
- <attribute name="resizable" value="true" />
|
|
|
- <attribute name="start-position" value="center" />
|
|
|
- <attribute name="minimize-to-tray" value="true" />
|
|
|
+ <attribute name="width" value="1400" />
|
|
|
+ <attribute name="height" value="900" />
|
|
|
+ <attribute name="min-width" value="800" />
|
|
|
+ <attribute name="min-height" value="600" />
|
|
|
+ <attribute name="window-state" value="Maximized" />
|
|
|
+ <attribute name="can-resize" value="true" />
|
|
|
+ <attribute name="system-decorations" value="Full" />
|
|
|
</attributes>
|
|
|
|
|
|
- <!-- NEW: View properties for view integration -->
|
|
|
<view-properties>
|
|
|
<role>main</role>
|
|
|
<default>true</default>
|
|
|
+ <modal>false</modal>
|
|
|
<data-context-binding>dashboardData</data-context-binding>
|
|
|
</view-properties>
|
|
|
|
|
|
- <!-- Override specific slots from the wireframe -->
|
|
|
+ <!-- Advanced Data Binding -->
|
|
|
+ <data-binding>
|
|
|
+ <data-context source="ModernDashboardViewModel" type="ViewModels.ModernDashboardViewModel" mode="TwoWay" />
|
|
|
+ <view-model class="ModernDashboardViewModel" assembly="Dashboard.ViewModels"
|
|
|
+ namespace="Dashboard.ViewModels" />
|
|
|
+ <binding-properties>
|
|
|
+ <property control="loadingIndicator" property="IsVisible" binding-path="IsLoading"
|
|
|
+ mode="OneWay" converter="BooleanToVisibilityConverter" />
|
|
|
+ <property control="dataGrid" property="ItemsSource" binding-path="DashboardItems"
|
|
|
+ mode="OneWay" validation-rule="NotNullValidator" />
|
|
|
+ <property control="aiPanel" property="Insights" binding-path="AIInsights"
|
|
|
+ mode="OneWay" converter="InsightCollectionConverter" />
|
|
|
+ </binding-properties>
|
|
|
+ </data-binding>
|
|
|
+
|
|
|
+ <!-- Comprehensive Accessibility -->
|
|
|
+ <accessibility compliance-level="wcag-aa">
|
|
|
+ <screen-reader window-title="Analytics Dashboard"
|
|
|
+ description="Main dashboard displaying real-time analytics with AI insights"
|
|
|
+ landmark-role="main" />
|
|
|
+ <keyboard-navigation tab-order-start="1" focus-trap="false" escape-closes="false" />
|
|
|
+ <color-contrast high-contrast-support="true" minimum-ratio="4.5" />
|
|
|
+ </accessibility>
|
|
|
+
|
|
|
<slot-overrides>
|
|
|
- <slot name="header-actions">
|
|
|
- <Button name="userProfileButton" text="Profile" />
|
|
|
- <Button name="settingsButton" text="Settings" />
|
|
|
- <Button name="helpButton" text="Help" />
|
|
|
+ <!-- Enhanced Header with AI Assistant -->
|
|
|
+ <slot name="header-content">
|
|
|
+ <Grid name="headerGrid">
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="*" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ </column-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <StackPanel name="titlePanel" grid-column="0" orientation="horizontal" spacing="10">
|
|
|
+ <TextBlock name="titleText" text="Analytics Dashboard" font-size="18" font-weight="Bold"
|
|
|
+ aria-label="Dashboard title" />
|
|
|
+ <ProgressBar name="loadingIndicator" width="100" height="4"
|
|
|
+ is-indeterminate="true" is-visible="{Binding IsLoading}"
|
|
|
+ aria-label="Loading progress" />
|
|
|
+ </StackPanel>
|
|
|
+
|
|
|
+ <StackPanel name="aiPanel" grid-column="1" orientation="horizontal" spacing="5">
|
|
|
+ <Button name="aiAssistantButton" text="AI Assistant"
|
|
|
+ command="{Binding ShowAIAssistantCommand}"
|
|
|
+ aria-label="Open AI Assistant panel"
|
|
|
+ tooltip="Get AI-powered insights and suggestions" />
|
|
|
+ <InfoBar name="aiStatusInfo" severity="Informational"
|
|
|
+ message="{Binding AIStatus}" is-open="{Binding ShowAIStatus}"
|
|
|
+ aria-live="polite" />
|
|
|
+ </StackPanel>
|
|
|
+
|
|
|
+ <StackPanel name="userPanel" grid-column="2" orientation="horizontal" spacing="5">
|
|
|
+ <Button name="settingsButton" text="Settings"
|
|
|
+ command="{Binding ShowSettingsCommand}"
|
|
|
+ aria-label="Open application settings" />
|
|
|
+ <Button name="profileButton" text="{Binding CurrentUser.Name}"
|
|
|
+ command="{Binding ShowProfileCommand}"
|
|
|
+ aria-label="User profile menu" />
|
|
|
+ </StackPanel>
|
|
|
+ </Grid>
|
|
|
</slot>
|
|
|
|
|
|
- <slot name="navigation-items">
|
|
|
- <menu-items>
|
|
|
- <menu-item text="Dashboard" action="show-dashboard" />
|
|
|
- <menu-item text="Users" action="show-users" />
|
|
|
- <menu-item text="Reports" action="show-reports" />
|
|
|
- <menu-item text="Settings" action="show-settings" />
|
|
|
- <menu-item text="" separator="true" />
|
|
|
- <menu-item text="About" action="show-about" />
|
|
|
- </menu-items>
|
|
|
+ <!-- Responsive Sidebar with Performance Optimization -->
|
|
|
+ <slot name="sidebar-content" visibility-binding="ScreenWidth"
|
|
|
+ visibility-value="GreaterThan:768" visibility-converter="ComparisonConverter">
|
|
|
+ <NavigationView name="mainNavigation" is-pane-open="true" display-mode="Left"
|
|
|
+ aria-label="Main navigation menu">
|
|
|
+ <NavigationView.MenuItems>
|
|
|
+ <NavigationViewItem name="dashboardNav" content="Dashboard" icon="Home"
|
|
|
+ command="{Binding NavigateToDashboardCommand}"
|
|
|
+ aria-label="Navigate to dashboard overview" />
|
|
|
+ <NavigationViewItem name="analyticsNav" content="Analytics" icon="BarChart"
|
|
|
+ command="{Binding NavigateToAnalyticsCommand}"
|
|
|
+ aria-label="Navigate to detailed analytics" />
|
|
|
+ <NavigationViewItem name="reportsNav" content="Reports" icon="Document"
|
|
|
+ command="{Binding NavigateToReportsCommand}"
|
|
|
+ aria-label="Navigate to reports section" />
|
|
|
+ <NavigationViewItem name="aiInsightsNav" content="AI Insights" icon="Lightbulb"
|
|
|
+ command="{Binding NavigateToAIInsightsCommand}"
|
|
|
+ aria-label="Navigate to AI-powered insights"
|
|
|
+ badge="{Binding NewInsightsCount}" />
|
|
|
+ </NavigationView.MenuItems>
|
|
|
+ </NavigationView>
|
|
|
</slot>
|
|
|
|
|
|
+ <!-- Main Content with Advanced Data Visualization -->
|
|
|
<slot name="main-content">
|
|
|
- <!-- Main application content -->
|
|
|
- <Panel name="dashboardPanel">
|
|
|
- <Label name="welcomeLabel" text="Welcome to Dashboard" font-size="18" />
|
|
|
+ <Grid name="contentGrid">
|
|
|
+ <grid-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="*" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ </row-definitions>
|
|
|
+ </grid-definitions>
|
|
|
|
|
|
- <Panel name="statisticsPanel" orientation="horizontal">
|
|
|
- <Panel name="statsLeft" width="400">
|
|
|
- <Label name="totalUsersLabel" text="Total Users: 0" />
|
|
|
- <Label name="activeSessionsLabel" text="Active Sessions: 0" />
|
|
|
- <Label name="systemStatusLabel" text="System Status: Running" />
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <Panel name="statsRight" fill="true">
|
|
|
- <ListView name="recentItems" view-mode="details">
|
|
|
- <columns>
|
|
|
- <column name="name" text="Name" width="200" sortable="true" />
|
|
|
- <column name="date" text="Date" width="150" sortable="true" />
|
|
|
- <column name="user" text="User" width="120" sortable="true" />
|
|
|
- <column name="status" text="Status" width="100" sortable="true" />
|
|
|
- </columns>
|
|
|
- </ListView>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
+ <!-- Filter and Search Panel -->
|
|
|
+ <Border name="filterPanel" grid-row="0" background="LightGray" padding="10"
|
|
|
+ corner-radius="5" margin="5" aria-label="Dashboard filters">
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ </column-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <TextBlock name="filterLabel" grid-column="0" text="Filters:"
|
|
|
+ vertical-alignment="Center" margin="0,0,10,0"
|
|
|
+ aria-label="Filter controls" />
|
|
|
+
|
|
|
+ <AutoCompleteBox name="searchBox" grid-column="1" placeholder-text="Search dashboard items..."
|
|
|
+ text="{Binding SearchText, Mode=TwoWay}"
|
|
|
+ items-source="{Binding SearchSuggestions}"
|
|
|
+ minimum-prefix-length="2" filter-mode="Contains"
|
|
|
+ aria-label="Search dashboard content"
|
|
|
+ aria-description="Type to search and filter dashboard items" />
|
|
|
+
|
|
|
+ <DatePicker name="dateFilter" grid-column="2"
|
|
|
+ selected-date="{Binding FilterDate, Mode=TwoWay}"
|
|
|
+ aria-label="Filter by date" margin="10,0,0,0" />
|
|
|
+
|
|
|
+ <Button name="refreshButton" grid-column="3" text="Refresh"
|
|
|
+ command="{Binding RefreshCommand}"
|
|
|
+ aria-label="Refresh dashboard data" margin="10,0,0,0" />
|
|
|
+ </Grid>
|
|
|
+ </Border>
|
|
|
|
|
|
- <Panel name="quickActionsPanel">
|
|
|
- <ButtonBar name="quickActions" alignment="left">
|
|
|
- <Button name="addUserButton" text="Add User" style="primary" />
|
|
|
- <Button name="generateReportButton" text="Generate Report" />
|
|
|
- <Button name="backupDataButton" text="Backup Data" />
|
|
|
- </ButtonBar>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
+ <!-- Enhanced Data Grid with Virtualization -->
|
|
|
+ <EnhancedDataGrid name="dashboardGrid" grid-row="1"
|
|
|
+ items-source="{Binding DashboardItems}"
|
|
|
+ selected-item="{Binding SelectedItem, Mode=TwoWay}"
|
|
|
+ virtualization-enabled="true"
|
|
|
+ accessibility-mode="enhanced"
|
|
|
+ performance-mode="optimized"
|
|
|
+ aria-label="Dashboard data grid"
|
|
|
+ aria-description="Tabular view of dashboard metrics with sorting and filtering">
|
|
|
+ <columns>
|
|
|
+ <DataGridTextColumn header="Metric" binding="{Binding Name}" width="200"
|
|
|
+ is-read-only="true" aria-label="Metric name" />
|
|
|
+ <DataGridTextColumn header="Value" binding="{Binding Value}" width="150"
|
|
|
+ is-read-only="true" aria-label="Current value" />
|
|
|
+ <DataGridTextColumn header="Change" binding="{Binding Change}" width="100"
|
|
|
+ is-read-only="true" aria-label="Change from previous period" />
|
|
|
+ <DataGridTextColumn header="Trend" binding="{Binding Trend}" width="100"
|
|
|
+ is-read-only="true" aria-label="Trend indicator" />
|
|
|
+ <DataGridTemplateColumn header="Actions" width="150" aria-label="Available actions">
|
|
|
+ <DataGridTemplateColumn.CellTemplate>
|
|
|
+ <DataTemplate>
|
|
|
+ <StackPanel orientation="horizontal" spacing="5">
|
|
|
+ <Button content="Details" command="{Binding ShowDetailsCommand}"
|
|
|
+ aria-label="Show metric details" />
|
|
|
+ <Button content="Chart" command="{Binding ShowChartCommand}"
|
|
|
+ aria-label="Show metric chart" />
|
|
|
+ </StackPanel>
|
|
|
+ </DataTemplate>
|
|
|
+ </DataGridTemplateColumn.CellTemplate>
|
|
|
+ </DataGridTemplateColumn>
|
|
|
+ </columns>
|
|
|
+ </EnhancedDataGrid>
|
|
|
+
|
|
|
+ <!-- AI Insights Panel -->
|
|
|
+ <Expander name="aiInsightsExpander" grid-row="2" header="AI Insights"
|
|
|
+ is-expanded="{Binding ShowAIInsights}"
|
|
|
+ aria-label="AI-powered insights and recommendations">
|
|
|
+ <ScrollViewer name="insightsScroller" max-height="200">
|
|
|
+ <ItemsRepeater name="insightsList" items-source="{Binding AIInsights}">
|
|
|
+ <ItemsRepeater.ItemTemplate>
|
|
|
+ <DataTemplate>
|
|
|
+ <Border background="LightBlue" padding="10" margin="5" corner-radius="5">
|
|
|
+ <StackPanel spacing="5">
|
|
|
+ <TextBlock text="{Binding Title}" font-weight="Bold"
|
|
|
+ aria-label="Insight title" />
|
|
|
+ <TextBlock text="{Binding Description}" text-wrapping="Wrap"
|
|
|
+ aria-label="Insight description" />
|
|
|
+ <StackPanel orientation="horizontal" spacing="5">
|
|
|
+ <Button content="Apply" command="{Binding ApplyCommand}"
|
|
|
+ aria-label="Apply this recommendation" />
|
|
|
+ <Button content="Dismiss" command="{Binding DismissCommand}"
|
|
|
+ aria-label="Dismiss this insight" />
|
|
|
+ </StackPanel>
|
|
|
+ </StackPanel>
|
|
|
+ </Border>
|
|
|
+ </DataTemplate>
|
|
|
+ </ItemsRepeater.ItemTemplate>
|
|
|
+ </ItemsRepeater>
|
|
|
+ </ScrollViewer>
|
|
|
+ </Expander>
|
|
|
+ </Grid>
|
|
|
</slot>
|
|
|
|
|
|
+ <!-- Enhanced Footer with Real-time Status -->
|
|
|
<slot name="footer-content">
|
|
|
- <Label name="statusLabel" text="Connected - System Ready" />
|
|
|
- <Label name="versionLabel" text="v1.1.0" alignment="right" />
|
|
|
- <Label name="timeLabel" text="00:00:00" alignment="right" />
|
|
|
+ <Grid name="footerGrid">
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="*" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ </column-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <TextBlock name="statusText" grid-column="0"
|
|
|
+ text="{Binding StatusMessage}"
|
|
|
+ aria-live="polite" aria-label="Application status" />
|
|
|
+
|
|
|
+ <TextBlock name="connectionStatus" grid-column="1"
|
|
|
+ text="{Binding ConnectionStatus}" margin="10,0"
|
|
|
+ aria-label="Connection status" />
|
|
|
+
|
|
|
+ <TextBlock name="lastUpdate" grid-column="2"
|
|
|
+ text="{Binding LastUpdateTime, StringFormat='Last updated: {0:HH:mm:ss}'}"
|
|
|
+ margin="10,0" aria-label="Last data update time" />
|
|
|
+
|
|
|
+ <TextBlock name="versionInfo" grid-column="3"
|
|
|
+ text="v2.0.0" margin="10,0"
|
|
|
+ aria-label="Application version" />
|
|
|
+ </Grid>
|
|
|
</slot>
|
|
|
</slot-overrides>
|
|
|
</window>
|
|
|
|
|
|
- <!-- User management window inheriting dialog wireframe -->
|
|
|
- <window name="UserListWindow" title="User Management" wireframe="StandardAppLayout" view="UserManagementView">
|
|
|
+ <!-- AI Insights Panel Window -->
|
|
|
+ <window name="AIInsightsPanel" title="AI Insights" view="ModernDashboardView"
|
|
|
+ target-platform="avalonia" schema-version="1.3">
|
|
|
+
|
|
|
<attributes>
|
|
|
- <attribute name="width" value="900" />
|
|
|
+ <attribute name="width" value="400" />
|
|
|
<attribute name="height" value="600" />
|
|
|
- <attribute name="modal" value="false" />
|
|
|
+ <attribute name="can-resize" value="true" />
|
|
|
+ <attribute name="show-in-taskbar" value="false" />
|
|
|
+ <attribute name="topmost" value="false" />
|
|
|
</attributes>
|
|
|
|
|
|
<view-properties>
|
|
|
- <role>main</role>
|
|
|
- <default>true</default>
|
|
|
- <data-context-binding>userList</data-context-binding>
|
|
|
+ <role>preview</role>
|
|
|
+ <modal>false</modal>
|
|
|
+ <data-context-binding>aiInsights</data-context-binding>
|
|
|
+ <parent-window>MainDashboard</parent-window>
|
|
|
</view-properties>
|
|
|
|
|
|
- <slot-overrides>
|
|
|
- <slot name="header-content">
|
|
|
- <Label name="titleLabel" text="User Management" font-size="16" />
|
|
|
- <Panel name="searchPanel" orientation="horizontal">
|
|
|
- <TextBox name="searchInput" placeholder="Search users..." />
|
|
|
- <Button name="searchButton" text="Search" />
|
|
|
- </Panel>
|
|
|
- </slot>
|
|
|
-
|
|
|
- <slot name="main-content">
|
|
|
- <Panel name="userManagementPanel">
|
|
|
- <Panel name="toolbarPanel" height="40" orientation="horizontal">
|
|
|
- <ButtonBar name="userActions" alignment="left">
|
|
|
- <Button name="addUserButton" text="Add User" style="primary" />
|
|
|
- <Button name="editUserButton" text="Edit" enabled="false" />
|
|
|
- <Button name="deleteUserButton" text="Delete" enabled="false" style="danger" />
|
|
|
- <Button name="resetPasswordButton" text="Reset Password" enabled="false" />
|
|
|
- </ButtonBar>
|
|
|
-
|
|
|
- <ButtonBar name="viewActions" alignment="right">
|
|
|
- <Button name="refreshButton" text="Refresh" />
|
|
|
- <Button name="exportButton" text="Export" />
|
|
|
- </ButtonBar>
|
|
|
- </Panel>
|
|
|
-
|
|
|
- <ListView name="userGrid" view-mode="details" multi-select="true">
|
|
|
- <columns>
|
|
|
- <column name="id" text="ID" width="80" sortable="true" />
|
|
|
- <column name="username" text="Username" width="150" sortable="true" />
|
|
|
- <column name="fullname" text="Full Name" width="200" sortable="true" />
|
|
|
- <column name="email" text="Email" width="250" sortable="true" />
|
|
|
- <column name="role" text="Role" width="120" sortable="true" />
|
|
|
- <column name="status" text="Status" width="100" sortable="true" />
|
|
|
- <column name="lastlogin" text="Last Login" width="150" sortable="true" />
|
|
|
- </columns>
|
|
|
- </ListView>
|
|
|
- </Panel>
|
|
|
- </slot>
|
|
|
- </slot-overrides>
|
|
|
+ <accessibility compliance-level="wcag-aa">
|
|
|
+ <screen-reader window-title="AI Insights Panel"
|
|
|
+ description="Detailed view of AI-generated insights and recommendations"
|
|
|
+ landmark-role="complementary" />
|
|
|
+ <keyboard-navigation tab-order-start="1" focus-trap="false" escape-closes="true" />
|
|
|
+ </accessibility>
|
|
|
+
|
|
|
+ <ScrollViewer name="insightsContainer" vertical-scroll-bar-visibility="Auto">
|
|
|
+ <StackPanel name="insightsPanel" spacing="10" margin="10">
|
|
|
+ <TextBlock name="panelTitle" text="AI-Powered Insights" font-size="16" font-weight="Bold"
|
|
|
+ aria-label="AI insights panel title" />
|
|
|
+
|
|
|
+ <ItemsRepeater name="detailedInsightsList" items-source="{Binding AIInsights}">
|
|
|
+ <ItemsRepeater.ItemTemplate>
|
|
|
+ <DataTemplate>
|
|
|
+ <Border background="White" border-brush="Gray" border-thickness="1"
|
|
|
+ padding="15" margin="5" corner-radius="8">
|
|
|
+ <StackPanel spacing="10">
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="*" />
|
|
|
+ <column-definition width="Auto" />
|
|
|
+ </column-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <TextBlock grid-column="0" text="{Binding Title}" font-weight="Bold"
|
|
|
+ font-size="14" aria-label="Insight title" />
|
|
|
+ <TextBlock grid-column="1" text="{Binding Confidence, StringFormat='Confidence: {0:P0}'}"
|
|
|
+ font-size="12" foreground="Gray" aria-label="AI confidence level" />
|
|
|
+ </Grid>
|
|
|
+
|
|
|
+ <TextBlock text="{Binding Description}" text-wrapping="Wrap"
|
|
|
+ aria-label="Detailed insight description" />
|
|
|
+
|
|
|
+ <TextBlock text="{Binding Impact}" text-wrapping="Wrap"
|
|
|
+ font-style="Italic" foreground="DarkBlue"
|
|
|
+ aria-label="Expected impact" />
|
|
|
+
|
|
|
+ <StackPanel orientation="horizontal" spacing="10">
|
|
|
+ <Button content="Apply Recommendation"
|
|
|
+ command="{Binding ApplyRecommendationCommand}"
|
|
|
+ style="AccentButtonStyle"
|
|
|
+ aria-label="Apply this AI recommendation" />
|
|
|
+ <Button content="Learn More"
|
|
|
+ command="{Binding LearnMoreCommand}"
|
|
|
+ aria-label="Learn more about this insight" />
|
|
|
+ <Button content="Provide Feedback"
|
|
|
+ command="{Binding ProvideFeedbackCommand}"
|
|
|
+ aria-label="Provide feedback on this insight" />
|
|
|
+ </StackPanel>
|
|
|
+
|
|
|
+ <TextBlock text="{Binding GeneratedAt, StringFormat='Generated: {0:g}'}"
|
|
|
+ font-size="10" foreground="Gray"
|
|
|
+ aria-label="Insight generation timestamp" />
|
|
|
+ </StackPanel>
|
|
|
+ </Border>
|
|
|
+ </DataTemplate>
|
|
|
+ </ItemsRepeater.ItemTemplate>
|
|
|
+ </ItemsRepeater>
|
|
|
+
|
|
|
+ <Button name="refreshInsightsButton" content="Refresh AI Insights"
|
|
|
+ command="{Binding RefreshAIInsightsCommand}"
|
|
|
+ horizontal-alignment="Center" margin="20"
|
|
|
+ aria-label="Request new AI insights" />
|
|
|
+ </StackPanel>
|
|
|
+ </ScrollViewer>
|
|
|
</window>
|
|
|
|
|
|
- <!-- User edit dialog inheriting dialog wireframe -->
|
|
|
- <window name="UserEditDialog" title="Edit User" wireframe="DialogLayout" view="UserManagementView">
|
|
|
+ <!-- Settings Dialog with Advanced Configuration -->
|
|
|
+ <window name="SettingsDialog" title="Application Settings"
|
|
|
+ wireframe="DialogLayout" view="ModernDashboardView"
|
|
|
+ target-platform="avalonia" schema-version="1.3">
|
|
|
+
|
|
|
<attributes>
|
|
|
- <attribute name="width" value="500" />
|
|
|
- <attribute name="height" value="400" />
|
|
|
+ <attribute name="width" value="600" />
|
|
|
+ <attribute name="height" value="500" />
|
|
|
+ <attribute name="can-resize" value="true" />
|
|
|
<attribute name="modal" value="true" />
|
|
|
- <attribute name="resizable" value="false" />
|
|
|
+ <attribute name="show-in-taskbar" value="false" />
|
|
|
+ <attribute name="window-startup-location" value="CenterOwner" />
|
|
|
</attributes>
|
|
|
|
|
|
<view-properties>
|
|
|
- <role>editor</role>
|
|
|
+ <role>utility</role>
|
|
|
<modal>true</modal>
|
|
|
- <data-context-binding>currentUser</data-context-binding>
|
|
|
- <parent-window>UserListWindow</parent-window>
|
|
|
+ <data-context-binding>userPreferences</data-context-binding>
|
|
|
+ <parent-window>MainDashboard</parent-window>
|
|
|
</view-properties>
|
|
|
|
|
|
- <slot-overrides>
|
|
|
- <slot name="dialog-title">
|
|
|
- <Label name="titleLabel" text="User Details" />
|
|
|
- </slot>
|
|
|
+ <data-binding>
|
|
|
+ <data-context source="SettingsViewModel" type="ViewModels.SettingsViewModel" mode="TwoWay" />
|
|
|
+ <binding-properties>
|
|
|
+ <property control="themeComboBox" property="SelectedItem" binding-path="SelectedTheme"
|
|
|
+ mode="TwoWay" validation-rule="NotNullValidator" />
|
|
|
+ <property control="languageComboBox" property="SelectedItem" binding-path="PreferredLanguage"
|
|
|
+ mode="TwoWay" />
|
|
|
+ <property control="accessibilityToggle" property="IsChecked" binding-path="HighContrastMode"
|
|
|
+ mode="TwoWay" />
|
|
|
+ </binding-properties>
|
|
|
+ </data-binding>
|
|
|
+
|
|
|
+ <accessibility compliance-level="wcag-aa">
|
|
|
+ <screen-reader window-title="Application Settings Dialog"
|
|
|
+ description="Configure application preferences and accessibility options"
|
|
|
+ landmark-role="dialog" />
|
|
|
+ <keyboard-navigation tab-order-start="1" focus-trap="true" escape-closes="true" />
|
|
|
+ </accessibility>
|
|
|
+
|
|
|
+ <TabControl name="settingsTabs" selected-index="0"
|
|
|
+ aria-label="Settings categories">
|
|
|
+ <TabItem name="generalTab" header="General"
|
|
|
+ aria-label="General application settings">
|
|
|
+ <StackPanel spacing="15" margin="20">
|
|
|
+ <TextBlock text="General Settings" font-size="16" font-weight="Bold"
|
|
|
+ aria-label="General settings section" />
|
|
|
+
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="150" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ </column-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ </row-definitions>
|
|
|
+ </grid-definitions>
|
|
|
+
|
|
|
+ <TextBlock grid-row="0" grid-column="0" text="Theme:"
|
|
|
+ vertical-alignment="Center" aria-label="Theme selection" />
|
|
|
+ <ComboBox name="themeComboBox" grid-row="0" grid-column="1"
|
|
|
+ selected-item="{Binding SelectedTheme, Mode=TwoWay}"
|
|
|
+ aria-label="Select application theme">
|
|
|
+ <ComboBoxItem content="Light Theme" />
|
|
|
+ <ComboBoxItem content="Dark Theme" />
|
|
|
+ <ComboBoxItem content="High Contrast" />
|
|
|
+ <ComboBoxItem content="System Default" />
|
|
|
+ </ComboBox>
|
|
|
+
|
|
|
+ <TextBlock grid-row="1" grid-column="0" text="Language:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Language selection" />
|
|
|
+ <ComboBox name="languageComboBox" grid-row="1" grid-column="1" margin="0,10,0,0"
|
|
|
+ selected-item="{Binding PreferredLanguage, Mode=TwoWay}"
|
|
|
+ aria-label="Select application language">
|
|
|
+ <ComboBoxItem content="English" />
|
|
|
+ <ComboBoxItem content="German" />
|
|
|
+ <ComboBoxItem content="French" />
|
|
|
+ <ComboBoxItem content="Spanish" />
|
|
|
+ <ComboBoxItem content="Chinese (Simplified)" />
|
|
|
+ <ComboBoxItem content="Arabic" />
|
|
|
+ <ComboBoxItem content="Hebrew" />
|
|
|
+ </ComboBox>
|
|
|
+
|
|
|
+ <TextBlock grid-row="2" grid-column="0" text="Auto-save:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Auto-save settings" />
|
|
|
+ <StackPanel grid-row="2" grid-column="1" orientation="horizontal"
|
|
|
+ spacing="10" margin="0,10,0,0">
|
|
|
+ <ToggleSwitch name="autoSaveToggle"
|
|
|
+ is-checked="{Binding AutoSaveEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable automatic saving" />
|
|
|
+ <NumericUpDown name="autoSaveInterval" minimum="1" maximum="60"
|
|
|
+ value="{Binding AutoSaveInterval, Mode=TwoWay}"
|
|
|
+ suffix=" minutes" width="100"
|
|
|
+ aria-label="Auto-save interval in minutes" />
|
|
|
+ </StackPanel>
|
|
|
+
|
|
|
+ <TextBlock grid-row="3" grid-column="0" text="Notifications:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Notification settings" />
|
|
|
+ <StackPanel grid-row="3" grid-column="1" spacing="5" margin="0,10,0,0">
|
|
|
+ <CheckBox name="desktopNotifications"
|
|
|
+ content="Desktop notifications"
|
|
|
+ is-checked="{Binding DesktopNotificationsEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable desktop notifications" />
|
|
|
+ <CheckBox name="soundNotifications"
|
|
|
+ content="Sound notifications"
|
|
|
+ is-checked="{Binding SoundNotificationsEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable sound notifications" />
|
|
|
+ </StackPanel>
|
|
|
+ </Grid>
|
|
|
+ </StackPanel>
|
|
|
+ </TabItem>
|
|
|
|
|
|
- <slot name="dialog-body">
|
|
|
- <!-- Use FormLayout as nested wireframe -->
|
|
|
- <wireframe-instance name="userForm" wireframe="FormLayout">
|
|
|
- <slot name="form-content">
|
|
|
- <FormField name="usernameField" label-text="Username:" required="true">
|
|
|
- <TextBox name="usernameInput" slot="input" max-length="50" />
|
|
|
- </FormField>
|
|
|
+ <TabItem name="accessibilityTab" header="Accessibility"
|
|
|
+ aria-label="Accessibility settings">
|
|
|
+ <StackPanel spacing="15" margin="20">
|
|
|
+ <TextBlock text="Accessibility Settings" font-size="16" font-weight="Bold"
|
|
|
+ aria-label="Accessibility settings section" />
|
|
|
+
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="200" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ </column-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ </row-definitions>
|
|
|
+ </grid-definitions>
|
|
|
|
|
|
- <FormField name="fullnameField" label-text="Full Name:" required="true">
|
|
|
- <TextBox name="fullnameInput" slot="input" max-length="100" />
|
|
|
- </FormField>
|
|
|
+ <TextBlock grid-row="0" grid-column="0" text="High Contrast Mode:"
|
|
|
+ vertical-alignment="Center" aria-label="High contrast mode" />
|
|
|
+ <ToggleSwitch name="accessibilityToggle" grid-row="0" grid-column="1"
|
|
|
+ is-checked="{Binding HighContrastMode, Mode=TwoWay}"
|
|
|
+ aria-label="Enable high contrast mode" />
|
|
|
|
|
|
- <FormField name="emailField" label-text="Email:" required="true">
|
|
|
- <TextBox name="emailInput" slot="input" max-length="255" />
|
|
|
- </FormField>
|
|
|
+ <TextBlock grid-row="1" grid-column="0" text="Font Size:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Font size adjustment" />
|
|
|
+ <Slider name="fontSizeSlider" grid-row="1" grid-column="1"
|
|
|
+ minimum="12" maximum="24" value="{Binding FontSize, Mode=TwoWay}"
|
|
|
+ tick-frequency="2" is-snap-to-tick-enabled="true"
|
|
|
+ margin="0,10,0,0" aria-label="Adjust font size" />
|
|
|
|
|
|
- <FormField name="roleField" label-text="Role:">
|
|
|
- <ComboBox name="roleCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="admin" text="Administrator" />
|
|
|
- <item value="user" text="Standard User" />
|
|
|
- <item value="viewer" text="Viewer Only" />
|
|
|
- <item value="moderator" text="Moderator" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
+ <TextBlock grid-row="2" grid-column="0" text="Screen Reader:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Screen reader optimization" />
|
|
|
+ <CheckBox name="screenReaderOptimized" grid-row="2" grid-column="1"
|
|
|
+ content="Optimize for screen readers" margin="0,10,0,0"
|
|
|
+ is-checked="{Binding ScreenReaderOptimized, Mode=TwoWay}"
|
|
|
+ aria-label="Enable screen reader optimizations" />
|
|
|
|
|
|
- <FormField name="statusField" label-text="Status:">
|
|
|
- <ComboBox name="statusCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="active" text="Active" />
|
|
|
- <item value="inactive" text="Inactive" />
|
|
|
- <item value="suspended" text="Suspended" />
|
|
|
- <item value="pending" text="Pending Approval" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
+ <TextBlock grid-row="3" grid-column="0" text="Keyboard Navigation:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Keyboard navigation settings" />
|
|
|
+ <CheckBox name="enhancedKeyboardNav" grid-row="3" grid-column="1"
|
|
|
+ content="Enhanced keyboard navigation" margin="0,10,0,0"
|
|
|
+ is-checked="{Binding EnhancedKeyboardNavigation, Mode=TwoWay}"
|
|
|
+ aria-label="Enable enhanced keyboard navigation" />
|
|
|
|
|
|
- <FormField name="passwordField" label-text="Password:" required="false">
|
|
|
- <TextBox name="passwordInput" slot="input" />
|
|
|
- </FormField>
|
|
|
- </slot>
|
|
|
-
|
|
|
- <slot name="form-buttons">
|
|
|
- <Button name="saveButton" text="Save User" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- <Button name="resetPasswordButton" text="Reset Password" style="secondary" />
|
|
|
- </slot>
|
|
|
- </wireframe-instance>
|
|
|
- </slot>
|
|
|
-
|
|
|
- <slot name="dialog-buttons">
|
|
|
- <Button name="saveButton" text="Save Changes" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- <Button name="deleteButton" text="Delete User" style="danger" />
|
|
|
- </slot>
|
|
|
- </slot-overrides>
|
|
|
- </window>
|
|
|
-
|
|
|
- <!-- User permissions dialog -->
|
|
|
- <window name="UserPermissionsDialog" title="User Permissions" wireframe="DialogLayout" view="UserManagementView">
|
|
|
- <attributes>
|
|
|
- <attribute name="width" value="600" />
|
|
|
- <attribute name="height" value="500" />
|
|
|
- <attribute name="modal" value="true" />
|
|
|
- </attributes>
|
|
|
-
|
|
|
- <view-properties>
|
|
|
- <role>utility</role>
|
|
|
- <modal>true</modal>
|
|
|
- <data-context-binding>currentUser</data-context-binding>
|
|
|
- <parent-window>UserListWindow</parent-window>
|
|
|
- </view-properties>
|
|
|
-
|
|
|
- <slot-overrides>
|
|
|
- <slot name="dialog-title">
|
|
|
- <Label name="titleLabel" text="Manage User Permissions" />
|
|
|
- </slot>
|
|
|
+ <TextBlock grid-row="4" grid-column="0" text="Animation:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Animation preferences" />
|
|
|
+ <CheckBox name="reduceAnimations" grid-row="4" grid-column="1"
|
|
|
+ content="Reduce animations" margin="0,10,0,0"
|
|
|
+ is-checked="{Binding ReduceAnimations, Mode=TwoWay}"
|
|
|
+ aria-label="Reduce or disable animations" />
|
|
|
+ </Grid>
|
|
|
+ </StackPanel>
|
|
|
+ </TabItem>
|
|
|
|
|
|
- <slot name="dialog-body">
|
|
|
- <Panel name="permissionsPanel">
|
|
|
- <Label name="userInfoLabel" text="User: {currentUser.username}" font-size="14" />
|
|
|
+ <TabItem name="performanceTab" header="Performance"
|
|
|
+ aria-label="Performance settings">
|
|
|
+ <StackPanel spacing="15" margin="20">
|
|
|
+ <TextBlock text="Performance Settings" font-size="16" font-weight="Bold"
|
|
|
+ aria-label="Performance settings section" />
|
|
|
|
|
|
- <TabControl name="permissionTabs">
|
|
|
- <tab name="basic" text="Basic Permissions">
|
|
|
- <Panel name="basicPermissions">
|
|
|
- <TreeView name="basicPermissionsTree" checkboxes="true">
|
|
|
- <nodes>
|
|
|
- <node text="Application Access" value="app.access" checked="true">
|
|
|
- <nodes>
|
|
|
- <node text="Dashboard View" value="dashboard.view" checked="true" />
|
|
|
- <node text="Reports View" value="reports.view" checked="false" />
|
|
|
- <node text="Settings Access" value="settings.read" checked="false" />
|
|
|
- </nodes>
|
|
|
- </node>
|
|
|
- <node text="User Management" value="user.manage" checked="false">
|
|
|
- <nodes>
|
|
|
- <node text="View Users" value="user.read" checked="false" />
|
|
|
- <node text="Create Users" value="user.create" checked="false" />
|
|
|
- <node text="Edit Users" value="user.write" checked="false" />
|
|
|
- <node text="Delete Users" value="user.delete" checked="false" />
|
|
|
- </nodes>
|
|
|
- </node>
|
|
|
- </nodes>
|
|
|
- </TreeView>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="200" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ </column-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ </row-definitions>
|
|
|
+ </grid-definitions>
|
|
|
|
|
|
- <tab name="advanced" text="Advanced Permissions">
|
|
|
- <Panel name="advancedPermissions">
|
|
|
- <ListView name="advancedPermissionsList" view-mode="details" multi-select="true">
|
|
|
- <columns>
|
|
|
- <column name="permission" text="Permission" width="200" />
|
|
|
- <column name="description" text="Description" width="300" />
|
|
|
- <column name="granted" text="Granted" width="80" />
|
|
|
- </columns>
|
|
|
- </ListView>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
+ <TextBlock grid-row="0" grid-column="0" text="Data Virtualization:"
|
|
|
+ vertical-alignment="Center" aria-label="Data virtualization" />
|
|
|
+ <ToggleSwitch name="virtualizationToggle" grid-row="0" grid-column="1"
|
|
|
+ is-checked="{Binding VirtualizationEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable data virtualization for large datasets" />
|
|
|
|
|
|
- <tab name="roles" text="Role Assignment">
|
|
|
- <Panel name="roleAssignment">
|
|
|
- <FormField name="primaryRoleField" label-text="Primary Role:">
|
|
|
- <ComboBox name="primaryRoleCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="admin" text="Administrator" />
|
|
|
- <item value="user" text="Standard User" />
|
|
|
- <item value="viewer" text="Viewer" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="additionalRolesField" label-text="Additional Roles:">
|
|
|
- <ListView name="additionalRolesList" slot="input" view-mode="list" multi-select="true">
|
|
|
- <columns>
|
|
|
- <column name="role" text="Role" width="150" />
|
|
|
- </columns>
|
|
|
- </ListView>
|
|
|
- </FormField>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
- </TabControl>
|
|
|
- </Panel>
|
|
|
- </slot>
|
|
|
-
|
|
|
- <slot name="dialog-buttons">
|
|
|
- <Button name="savePermissionsButton" text="Save Permissions" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- <Button name="resetToDefaultButton" text="Reset to Default" />
|
|
|
- </slot>
|
|
|
- </slot-overrides>
|
|
|
- </window>
|
|
|
-
|
|
|
- <!-- Settings window with partial wireframe override -->
|
|
|
- <window name="SettingsWindow" title="Application Settings" wireframe="StandardAppLayout" view="SettingsView">
|
|
|
- <attributes>
|
|
|
- <attribute name="width" value="800" />
|
|
|
- <attribute name="height" value="600" />
|
|
|
- <attribute name="modal" value="false" />
|
|
|
- </attributes>
|
|
|
-
|
|
|
- <view-properties>
|
|
|
- <role>main</role>
|
|
|
- <default>true</default>
|
|
|
- <data-context-binding>currentSettings</data-context-binding>
|
|
|
- </view-properties>
|
|
|
-
|
|
|
- <slot-overrides>
|
|
|
- <!-- Keep default header but override navigation -->
|
|
|
- <slot name="navigation-items">
|
|
|
- <menu-items>
|
|
|
- <menu-item text="General" action="settings-general" />
|
|
|
- <menu-item text="Appearance" action="settings-appearance" />
|
|
|
- <menu-item text="Security" action="settings-security" />
|
|
|
- <menu-item text="Database" action="settings-database" />
|
|
|
- <menu-item text="Logging" action="settings-logging" />
|
|
|
- <menu-item text="Advanced" action="settings-advanced" />
|
|
|
- </menu-items>
|
|
|
- </slot>
|
|
|
+ <TextBlock grid-row="1" grid-column="0" text="Cache Size:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Memory cache size" />
|
|
|
+ <StackPanel grid-row="1" grid-column="1" orientation="horizontal"
|
|
|
+ spacing="10" margin="0,10,0,0">
|
|
|
+ <Slider name="cacheSizeSlider" minimum="50" maximum="500"
|
|
|
+ value="{Binding CacheSize, Mode=TwoWay}" width="200"
|
|
|
+ aria-label="Set cache size in megabytes" />
|
|
|
+ <TextBlock text="{Binding CacheSize, StringFormat='{0} MB'}"
|
|
|
+ vertical-alignment="Center" />
|
|
|
+ </StackPanel>
|
|
|
+
|
|
|
+ <TextBlock grid-row="2" grid-column="0" text="Background Updates:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Background update frequency" />
|
|
|
+ <ComboBox name="updateFrequencyCombo" grid-row="2" grid-column="1" margin="0,10,0,0"
|
|
|
+ selected-item="{Binding UpdateFrequency, Mode=TwoWay}"
|
|
|
+ aria-label="Select background update frequency">
|
|
|
+ <ComboBoxItem content="Real-time" />
|
|
|
+ <ComboBoxItem content="Every 30 seconds" />
|
|
|
+ <ComboBoxItem content="Every minute" />
|
|
|
+ <ComboBoxItem content="Every 5 minutes" />
|
|
|
+ <ComboBoxItem content="Manual only" />
|
|
|
+ </ComboBox>
|
|
|
+
|
|
|
+ <TextBlock grid-row="3" grid-column="0" text="AI Processing:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="AI processing settings" />
|
|
|
+ <StackPanel grid-row="3" grid-column="1" spacing="5" margin="0,10,0,0">
|
|
|
+ <CheckBox name="enableAIProcessing"
|
|
|
+ content="Enable AI analysis"
|
|
|
+ is-checked="{Binding AIProcessingEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable AI-powered analysis" />
|
|
|
+ <CheckBox name="localAIProcessing"
|
|
|
+ content="Prefer local processing"
|
|
|
+ is-checked="{Binding PreferLocalAI, Mode=TwoWay}"
|
|
|
+ aria-label="Prefer local AI processing over cloud" />
|
|
|
+ </StackPanel>
|
|
|
+ </Grid>
|
|
|
+ </StackPanel>
|
|
|
+ </TabItem>
|
|
|
|
|
|
- <slot name="main-content">
|
|
|
- <Panel name="settingsContent">
|
|
|
- <!-- Settings tabs or sections would go here -->
|
|
|
- <TabControl name="settingsTabs">
|
|
|
- <tab name="general" text="General Settings">
|
|
|
- <Panel name="generalSettings">
|
|
|
- <FormField name="appNameField" label-text="Application Name:">
|
|
|
- <TextBox name="appNameInput" slot="input" value="Sample Application" />
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="languageField" label-text="Language:">
|
|
|
- <ComboBox name="languageCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="en" text="English" />
|
|
|
- <item value="de" text="Deutsch" />
|
|
|
- <item value="fr" text="Français" />
|
|
|
- <item value="es" text="Español" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="timezoneField" label-text="Timezone:">
|
|
|
- <ComboBox name="timezoneCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="UTC" text="UTC" />
|
|
|
- <item value="EST" text="Eastern Time" />
|
|
|
- <item value="PST" text="Pacific Time" />
|
|
|
- <item value="CET" text="Central European Time" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="autoSaveField" label-text="Auto-save interval (minutes):">
|
|
|
- <TextBox name="autoSaveInput" slot="input" value="5" />
|
|
|
- </FormField>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
+ <TabItem name="securityTab" header="Security"
|
|
|
+ aria-label="Security and privacy settings">
|
|
|
+ <StackPanel spacing="15" margin="20">
|
|
|
+ <TextBlock text="Security & Privacy" font-size="16" font-weight="Bold"
|
|
|
+ aria-label="Security and privacy settings section" />
|
|
|
+
|
|
|
+ <Grid>
|
|
|
+ <grid-definitions>
|
|
|
+ <column-definitions>
|
|
|
+ <column-definition width="200" />
|
|
|
+ <column-definition width="*" />
|
|
|
+ </column-definitions>
|
|
|
+ <row-definitions>
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ <row-definition height="Auto" />
|
|
|
+ </row-definitions>
|
|
|
+ </grid-definitions>
|
|
|
|
|
|
- <tab name="appearance" text="Appearance">
|
|
|
- <Panel name="appearanceSettings">
|
|
|
- <FormField name="themeField" label-text="Theme:">
|
|
|
- <ComboBox name="themeCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="light" text="Light Theme" />
|
|
|
- <item value="dark" text="Dark Theme" />
|
|
|
- <item value="auto" text="Auto (System)" />
|
|
|
- <item value="high-contrast" text="High Contrast" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="fontSizeField" label-text="Font Size:">
|
|
|
- <ComboBox name="fontSizeCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="small" text="Small" />
|
|
|
- <item value="medium" text="Medium" />
|
|
|
- <item value="large" text="Large" />
|
|
|
- <item value="extra-large" text="Extra Large" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="colorSchemeField" label-text="Color Scheme:">
|
|
|
- <ComboBox name="colorSchemeCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="blue" text="Blue" />
|
|
|
- <item value="green" text="Green" />
|
|
|
- <item value="purple" text="Purple" />
|
|
|
- <item value="orange" text="Orange" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
+ <TextBlock grid-row="0" grid-column="0" text="Data Encryption:"
|
|
|
+ vertical-alignment="Center" aria-label="Data encryption" />
|
|
|
+ <ToggleSwitch name="encryptionToggle" grid-row="0" grid-column="1"
|
|
|
+ is-checked="{Binding DataEncryptionEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable data encryption" />
|
|
|
|
|
|
- <tab name="security" text="Security">
|
|
|
- <Panel name="securitySettings">
|
|
|
- <FormField name="sessionTimeoutField" label-text="Session Timeout (minutes):">
|
|
|
- <TextBox name="sessionTimeoutInput" slot="input" value="30" />
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="passwordPolicyField" label-text="Password Policy:">
|
|
|
- <ComboBox name="passwordPolicyCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="basic" text="Basic (6+ characters)" />
|
|
|
- <item value="standard" text="Standard (8+ chars, mixed case)" />
|
|
|
- <item value="strong" text="Strong (12+ chars, symbols)" />
|
|
|
- <item value="custom" text="Custom Policy" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="twoFactorField" label-text="Two-Factor Authentication:">
|
|
|
- <ComboBox name="twoFactorCombo" slot="input">
|
|
|
- <items>
|
|
|
- <item value="disabled" text="Disabled" />
|
|
|
- <item value="optional" text="Optional" />
|
|
|
- <item value="required" text="Required" />
|
|
|
- </items>
|
|
|
- </ComboBox>
|
|
|
- </FormField>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
+ <TextBlock grid-row="1" grid-column="0" text="Session Timeout:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Session timeout setting" />
|
|
|
+ <NumericUpDown name="sessionTimeout" grid-row="1" grid-column="1"
|
|
|
+ minimum="5" maximum="480" value="{Binding SessionTimeout, Mode=TwoWay}"
|
|
|
+ suffix=" minutes" margin="0,10,0,0"
|
|
|
+ aria-label="Set session timeout in minutes" />
|
|
|
|
|
|
- <tab name="database" text="Database">
|
|
|
- <Panel name="databaseSettings">
|
|
|
- <FormField name="connectionStringField" label-text="Connection String:">
|
|
|
- <TextBox name="connectionStringInput" slot="input" multiline="true" />
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="backupIntervalField" label-text="Backup Interval (hours):">
|
|
|
- <TextBox name="backupIntervalInput" slot="input" value="24" />
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <FormField name="queryTimeoutField" label-text="Query Timeout (seconds):">
|
|
|
- <TextBox name="queryTimeoutInput" slot="input" value="30" />
|
|
|
- </FormField>
|
|
|
-
|
|
|
- <Panel name="databaseActions">
|
|
|
- <ButtonBar name="dbActionButtons" alignment="left">
|
|
|
- <Button name="testConnectionButton" text="Test Connection" />
|
|
|
- <Button name="backupNowButton" text="Backup Now" />
|
|
|
- <Button name="optimizeButton" text="Optimize Database" />
|
|
|
- </ButtonBar>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
- </tab>
|
|
|
- </TabControl>
|
|
|
-
|
|
|
- <Panel name="settingsActions" height="60">
|
|
|
- <ButtonBar name="settingsButtons" alignment="right">
|
|
|
- <Button name="saveSettingsButton" text="Save Settings" style="primary" />
|
|
|
- <Button name="cancelButton" text="Cancel" />
|
|
|
- <Button name="resetToDefaultsButton" text="Reset to Defaults" style="secondary" />
|
|
|
- <Button name="exportSettingsButton" text="Export" />
|
|
|
- <Button name="importSettingsButton" text="Import" />
|
|
|
- </ButtonBar>
|
|
|
- </Panel>
|
|
|
- </Panel>
|
|
|
- </slot>
|
|
|
-
|
|
|
- <!-- Use default footer -->
|
|
|
- </slot-overrides>
|
|
|
+ <TextBlock grid-row="2" grid-column="0" text="Audit Logging:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="Audit logging settings" />
|
|
|
+ <CheckBox name="auditLogging" grid-row="2" grid-column="1"
|
|
|
+ content="Enable audit logging" margin="0,10,0,0"
|
|
|
+ is-checked="{Binding AuditLoggingEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable security audit logging" />
|
|
|
+
|
|
|
+ <TextBlock grid-row="3" grid-column="0" text="GDPR Compliance:"
|
|
|
+ vertical-alignment="Center" margin="0,10,0,0"
|
|
|
+ aria-label="GDPR compliance settings" />
|
|
|
+ <StackPanel grid-row="3" grid-column="1" spacing="5" margin="0,10,0,0">
|
|
|
+ <CheckBox name="gdprMode"
|
|
|
+ content="GDPR compliance mode"
|
|
|
+ is-checked="{Binding GDPRComplianceEnabled, Mode=TwoWay}"
|
|
|
+ aria-label="Enable GDPR compliance features" />
|
|
|
+ <Button name="dataExportButton" content="Export My Data"
|
|
|
+ command="{Binding ExportUserDataCommand}"
|
|
|
+ aria-label="Export personal data" />
|
|
|
+ </StackPanel>
|
|
|
+ </Grid>
|
|
|
+ </StackPanel>
|
|
|
+ </TabItem>
|
|
|
+ </TabControl>
|
|
|
+
|
|
|
+ <!-- Dialog Buttons -->
|
|
|
+ <StackPanel orientation="horizontal" horizontal-alignment="Right"
|
|
|
+ spacing="10" margin="20">
|
|
|
+ <Button name="saveButton" content="Save Changes"
|
|
|
+ command="{Binding SaveSettingsCommand}"
|
|
|
+ style="AccentButtonStyle"
|
|
|
+ aria-label="Save all settings changes" />
|
|
|
+ <Button name="cancelButton" content="Cancel"
|
|
|
+ command="{Binding CancelCommand}"
|
|
|
+ aria-label="Cancel without saving changes" />
|
|
|
+ <Button name="resetButton" content="Reset to Defaults"
|
|
|
+ command="{Binding ResetToDefaultsCommand}"
|
|
|
+ aria-label="Reset all settings to default values" />
|
|
|
+ </StackPanel>
|
|
|
</window>
|
|
|
|
|
|
-</ui-layout-def>
|
|
|
-
|
|
|
+</ui-layout-def>
|