You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							83 lines
						
					
					
						
							2.7 KiB
						
					
					
				
								package components
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								// ConfigSectionData represents data for a configuration section
							 | 
						|
								type ConfigSectionData struct {
							 | 
						|
								    Title       string
							 | 
						|
								    Icon        string
							 | 
						|
								    Description string
							 | 
						|
								    Fields      []interface{} // Will hold field data structures
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// InfoSectionData represents data for an informational section
							 | 
						|
								type InfoSectionData struct {
							 | 
						|
								    Title   string
							 | 
						|
								    Icon    string
							 | 
						|
								    Type    string // "info", "warning", "success", "danger"
							 | 
						|
								    Content string
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// ConfigSection renders a Bootstrap card for configuration settings
							 | 
						|
								templ ConfigSection(data ConfigSectionData) {
							 | 
						|
								    <div class="row">
							 | 
						|
								        <div class="col-12">
							 | 
						|
								            <div class="card mb-4">
							 | 
						|
								                <div class="card-header">
							 | 
						|
								                    <h5 class="mb-0">
							 | 
						|
								                        if data.Icon != "" {
							 | 
						|
								                            <i class={ data.Icon + " me-2" }></i>
							 | 
						|
								                        }
							 | 
						|
								                        { data.Title }
							 | 
						|
								                    </h5>
							 | 
						|
								                    if data.Description != "" {
							 | 
						|
								                        <small class="text-muted">{ data.Description }</small>
							 | 
						|
								                    }
							 | 
						|
								                </div>
							 | 
						|
								                <div class="card-body">
							 | 
						|
								                    for _, field := range data.Fields {
							 | 
						|
								                        switch v := field.(type) {
							 | 
						|
								                        case TextFieldData:
							 | 
						|
								                            @TextField(v)
							 | 
						|
								                        case NumberFieldData:
							 | 
						|
								                            @NumberField(v)
							 | 
						|
								                        case CheckboxFieldData:
							 | 
						|
								                            @CheckboxField(v)
							 | 
						|
								                        case SelectFieldData:
							 | 
						|
								                            @SelectField(v)
							 | 
						|
								                        case DurationFieldData:
							 | 
						|
								                            @DurationField(v)
							 | 
						|
								                        case DurationInputFieldData:
							 | 
						|
								                            @DurationInputField(v)
							 | 
						|
								                        }
							 | 
						|
								                    }
							 | 
						|
								                </div>
							 | 
						|
								            </div>
							 | 
						|
								        </div>
							 | 
						|
								    </div>
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// InfoSection renders a Bootstrap alert section for informational content
							 | 
						|
								templ InfoSection(data InfoSectionData) {
							 | 
						|
								    <div class="row">
							 | 
						|
								        <div class="col-12">
							 | 
						|
								            <div class="card mb-3">
							 | 
						|
								                <div class="card-header">
							 | 
						|
								                    <h5 class="mb-0">
							 | 
						|
								                        if data.Icon != "" {
							 | 
						|
								                            <i class={ data.Icon + " me-2" }></i>
							 | 
						|
								                        }
							 | 
						|
								                        { data.Title }
							 | 
						|
								                    </h5>
							 | 
						|
								                </div>
							 | 
						|
								                <div class="card-body">
							 | 
						|
								                    <div class={ "alert alert-" + data.Type } role="alert">
							 | 
						|
								                        {data.Content}
							 | 
						|
								                    </div>
							 | 
						|
								                </div>
							 | 
						|
								            </div>
							 | 
						|
								        </div>
							 | 
						|
								    </div>
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								 
							 |