Ultimate showcase: Organization (5 levels deep) + Kitchen Sink (ALL inputs) + Contacts + Scheduling + Media + Settings Async
<style data-schemaforms-layout-support>
.pydantic-form,
.md-form {
width: 100%;
max-width: none;
}
.pydantic-form > div,
.pydantic-form > fieldset,
.pydantic-form > [class*="row"],
.md-form > div,
.md-form > fieldset,
.md-form > [class*="row"] {
width: 100% !important;
max-width: none !important;
}
.pydantic-form [class*="col-"],
.md-form [class*="col-"] {
min-width: 0;
flex: 1 1 auto !important;
}
.pydantic-form [class*="section"],
.pydantic-form [data-schemaforms-section],
.pydantic-form fieldset,
.md-form [class*="section"],
.md-form [data-schemaforms-section],
.md-form fieldset {
width: 100% !important;
max-width: none !important;
box-sizing: border-box;
}
</style>
<form id=""
class="pydantic-form needs-validation"
style=""
method="POST"
action="/organization?style=bootstrap"
novalidate>
<section class="layout-field-section card shadow-sm mb-4">
<div class="card-header bg-body-tertiary">
<h3 class="card-title h5 mb-0">Complete Feature Showcase</h3>
</div>
<div class="card-body">
<p class="text-muted mb-2 layout-field-help">Explore all 6 tabs to see every feature of Pydantic SchemaForms</p>
<div class="layout-field-content">
<div class="tab-layout tabbed-layout" style="">
<div class="tab-navigation" role="tablist">
<button class="tab-button active"
type="button"
role="tab"
aria-selected="true"
aria-controls="tab-0"
onclick="switchTab('tab-0', this)">
Contacts
</button>
<button class="tab-button"
type="button"
role="tab"
aria-selected="false"
aria-controls="tab-1"
onclick="switchTab('tab-1', this)">
Kitchen Sink
</button>
<button class="tab-button"
type="button"
role="tab"
aria-selected="false"
aria-controls="tab-2"
onclick="switchTab('tab-2', this)">
Media
</button>
<button class="tab-button"
type="button"
role="tab"
aria-selected="false"
aria-controls="tab-3"
onclick="switchTab('tab-3', this)">
Organization
</button>
<button class="tab-button"
type="button"
role="tab"
aria-selected="false"
aria-controls="tab-4"
onclick="switchTab('tab-4', this)">
Scheduling
</button>
<button class="tab-button"
type="button"
role="tab"
aria-selected="false"
aria-controls="tab-5"
onclick="switchTab('tab-5', this)">
Settings
</button>
</div>
<div class="tab-content">
<div id="tab-0"
class="tab-panel active"
role="tabpanel"
style="display: block;"
aria-hidden="false">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="first_name"><i class="bi bi-person"></i> First Name *</label>
<input name="first_name" id="first_name" class="form-control" value="John" required="required" minlength="1" maxlength="100" placeholder="John" type="text" />
<div class="form-text">Contact's first name</div></div>
<div class="mb-3"><label for="last_name"><i class="bi bi-person"></i> Last Name *</label>
<input name="last_name" id="last_name" class="form-control" value="Smith" required="required" minlength="1" maxlength="100" placeholder="Doe" type="text" />
<div class="form-text">Contact's last name</div></div>
<div class="mb-3"><label for="email"><i class="bi bi-envelope"></i> Primary Email *</label>
<input name="email" id="email" class="form-control" value="john.smith@example.com" required="required" placeholder="john.doe@example.com" inputmode="email" type="email" />
<div class="form-text">Primary email address</div></div>
<div class="mb-3"><label for="company"><i class="bi bi-building"></i> Company</label>
<input name="company" id="company" class="form-control" value="Acme Corporation" placeholder="Acme Corporation" type="text" />
<div class="form-text">Company or organization</div></div>
<div class="mb-3"><label for="job_title"><i class="bi bi-briefcase"></i> Job Title</label>
<input name="job_title" id="job_title" class="form-control" value="Senior Software Engineer" placeholder="Software Engineer" type="text" />
<div class="form-text">Position or role</div></div>
<div class="mb-3"><label for="birth_date"><i class="bi bi-cake"></i> Date of Birth</label>
<div class="birthdate-input-group"><input name="birth_date" id="birth_date" class="form-control" value="1985-04-12" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="birth_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('birth_date');
const ageDisplay = document.getElementById('birth_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">Birth date (optional)</div></div>
<div class="mb-3 model-list-block" data-field-name="phone_numbers" data-min-items="0" data-max-items="10">
<label class="form-label fw-bold">Phone Numbers</label>
<div class="model-list-container" data-field-name="phone_numbers" data-min-items="0" data-max-items="10">
<div class="model-list-items" id="phone_numbers-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {phone_type}: {number}"
data-field-name="phone_numbers">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#phone_numbers_item_0_content"
aria-expanded="true"
aria-controls="phone_numbers_item_0_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="phone_numbers"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="phone_numbers_item_0_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="phone_numbers[0].phone_type" class="form-label">Type</label>
<select name="phone_numbers[0].phone_type" id="phone_numbers[0].phone_type" class="form-select"><option value="mobile">π± Mobile</option>
<option value="work">πΌ Work</option>
<option value="home">π Home</option>
<option value="fax">π Fax</option></select>
<div class="form-text">Type of phone number</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[0].number"><i class="bi bi-telephone"></i> Phone Number</label>
<input name="phone_numbers[0].number" id="phone_numbers[0].number" class="form-control" maxlength="20" placeholder="+1 (555) 123-4567" inputmode="tel" autocomplete="tel" type="tel" />
<div class="form-text">Contact phone number</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[0].is_primary">Primary Number</label>
<input name="phone_numbers[0].is_primary" id="phone_numbers[0].is_primary" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Is this the primary contact number?</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {phone_type}: {number}"
data-field-name="phone_numbers">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#phone_numbers_item_0_content"
aria-expanded="true"
aria-controls="phone_numbers_item_0_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
π mobile: +1 (555) 123-4567
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="phone_numbers"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="phone_numbers_item_0_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="phone_numbers[0].phone_type" class="form-label">Type</label>
<select name="phone_numbers[0].phone_type" id="phone_numbers[0].phone_type" class="form-select"><option value="mobile" selected>π± Mobile</option>
<option value="work">πΌ Work</option>
<option value="home">π Home</option>
<option value="fax">π Fax</option></select>
<div class="form-text">Type of phone number</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[0].number"><i class="bi bi-telephone"></i> Phone Number</label>
<input name="phone_numbers[0].number" id="phone_numbers[0].number" class="form-control" value="+1 (555) 123-4567" maxlength="20" placeholder="+1 (555) 123-4567" inputmode="tel" autocomplete="tel" type="tel" />
<div class="form-text">Contact phone number</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[0].is_primary">Primary Number</label>
<input name="phone_numbers[0].is_primary" id="phone_numbers[0].is_primary" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Is this the primary contact number?</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="π {phone_type}: {number}"
data-field-name="phone_numbers">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#phone_numbers_item_1_content"
aria-expanded="true"
aria-controls="phone_numbers_item_1_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
π work: +1 (555) 987-6543
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="phone_numbers"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="phone_numbers_item_1_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="phone_numbers[1].phone_type" class="form-label">Type</label>
<select name="phone_numbers[1].phone_type" id="phone_numbers[1].phone_type" class="form-select"><option value="mobile">π± Mobile</option>
<option value="work" selected>πΌ Work</option>
<option value="home">π Home</option>
<option value="fax">π Fax</option></select>
<div class="form-text">Type of phone number</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[1].number"><i class="bi bi-telephone"></i> Phone Number</label>
<input name="phone_numbers[1].number" id="phone_numbers[1].number" class="form-control" value="+1 (555) 987-6543" maxlength="20" placeholder="+1 (555) 123-4567" inputmode="tel" autocomplete="tel" type="tel" />
<div class="form-text">Contact phone number</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="phone_numbers[1].is_primary">Primary Number</label>
<input name="phone_numbers[1].is_primary" id="phone_numbers[1].is_primary" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Is this the primary contact number?</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="phone_numbers">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add multiple phone numbers</div>
</div>
<div class="mb-3 model-list-block" data-field-name="addresses" data-min-items="0" data-max-items="5">
<label class="form-label fw-bold">Addresses</label>
<div class="model-list-container" data-field-name="addresses" data-min-items="0" data-max-items="5">
<div class="model-list-items" id="addresses-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {address_type}: {city}, {state}"
data-field-name="addresses">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#addresses_item_0_content"
aria-expanded="false"
aria-controls="addresses_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="addresses"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="addresses_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[0].address_type" class="form-label">Address Type</label>
<select name="addresses[0].address_type" id="addresses[0].address_type" class="form-select"><option value="home">π Home</option>
<option value="work">πΌ Work</option>
<option value="billing">π³ Billing</option>
<option value="shipping">π¦ Shipping</option></select>
<div class="form-text">Type of address</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].street_line1"><i class="bi bi-house"></i> Street Address Line 1</label>
<input name="addresses[0].street_line1" id="addresses[0].street_line1" class="form-control" maxlength="200" placeholder="123 Main Street" type="text" />
<div class="form-text">Primary street address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].street_line2">Street Address Line 2</label>
<input name="addresses[0].street_line2" id="addresses[0].street_line2" class="form-control" placeholder="Apt 4B" type="text" />
<div class="form-text">Apartment, suite, unit, etc.</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].city"><i class="bi bi-building"></i> City</label>
<input name="addresses[0].city" id="addresses[0].city" class="form-control" maxlength="100" placeholder="San Francisco" type="text" />
<div class="form-text">City name</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].state">State/Province</label>
<input name="addresses[0].state" id="addresses[0].state" class="form-control" maxlength="50" placeholder="CA" type="text" />
<div class="form-text">State or province</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].postal_code"><i class="bi bi-mailbox"></i> Postal Code</label>
<input name="addresses[0].postal_code" id="addresses[0].postal_code" class="form-control" maxlength="20" placeholder="94105" type="text" />
<div class="form-text">ZIP or postal code</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[0].country" class="form-label">Country</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-globe"></i></span>
<select name="addresses[0].country" id="addresses[0].country" class="form-select"><option value="US">πΊπΈ United States</option>
<option value="CA">π¨π¦ Canada</option>
<option value="UK">π¬π§ United Kingdom</option>
<option value="AU">π¦πΊ Australia</option>
<option value="DE">π©πͺ Germany</option>
<option value="FR">π«π· France</option>
<option value="JP">π―π΅ Japan</option></select>
</div>
<div class="form-text">Country</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {address_type}: {city}, {state}"
data-field-name="addresses">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#addresses_item_0_content"
aria-expanded="false"
aria-controls="addresses_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π home: San Francisco, CA
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="addresses"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="addresses_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[0].address_type" class="form-label">Address Type</label>
<select name="addresses[0].address_type" id="addresses[0].address_type" class="form-select"><option value="home" selected>π Home</option>
<option value="work">πΌ Work</option>
<option value="billing">π³ Billing</option>
<option value="shipping">π¦ Shipping</option></select>
<div class="form-text">Type of address</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].street_line1"><i class="bi bi-house"></i> Street Address Line 1</label>
<input name="addresses[0].street_line1" id="addresses[0].street_line1" class="form-control" value="123 Main Street" maxlength="200" placeholder="123 Main Street" type="text" />
<div class="form-text">Primary street address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].street_line2">Street Address Line 2</label>
<input name="addresses[0].street_line2" id="addresses[0].street_line2" class="form-control" value="Apt 4B" placeholder="Apt 4B" type="text" />
<div class="form-text">Apartment, suite, unit, etc.</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].city"><i class="bi bi-building"></i> City</label>
<input name="addresses[0].city" id="addresses[0].city" class="form-control" value="San Francisco" maxlength="100" placeholder="San Francisco" type="text" />
<div class="form-text">City name</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].state">State/Province</label>
<input name="addresses[0].state" id="addresses[0].state" class="form-control" value="CA" maxlength="50" placeholder="CA" type="text" />
<div class="form-text">State or province</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[0].postal_code"><i class="bi bi-mailbox"></i> Postal Code</label>
<input name="addresses[0].postal_code" id="addresses[0].postal_code" class="form-control" value="94105" maxlength="20" placeholder="94105" type="text" />
<div class="form-text">ZIP or postal code</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[0].country" class="form-label">Country</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-globe"></i></span>
<select name="addresses[0].country" id="addresses[0].country" class="form-select"><option value="US" selected>πΊπΈ United States</option>
<option value="CA">π¨π¦ Canada</option>
<option value="UK">π¬π§ United Kingdom</option>
<option value="AU">π¦πΊ Australia</option>
<option value="DE">π©πͺ Germany</option>
<option value="FR">π«π· France</option>
<option value="JP">π―π΅ Japan</option></select>
</div>
<div class="form-text">Country</div>
</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="π {address_type}: {city}, {state}"
data-field-name="addresses">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#addresses_item_1_content"
aria-expanded="false"
aria-controls="addresses_item_1_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π work: Palo Alto, CA
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="addresses"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="addresses_item_1_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[1].address_type" class="form-label">Address Type</label>
<select name="addresses[1].address_type" id="addresses[1].address_type" class="form-select"><option value="home">π Home</option>
<option value="work" selected>πΌ Work</option>
<option value="billing">π³ Billing</option>
<option value="shipping">π¦ Shipping</option></select>
<div class="form-text">Type of address</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[1].street_line1"><i class="bi bi-house"></i> Street Address Line 1</label>
<input name="addresses[1].street_line1" id="addresses[1].street_line1" class="form-control" value="456 Corporate Blvd" maxlength="200" placeholder="123 Main Street" type="text" />
<div class="form-text">Primary street address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[1].street_line2">Street Address Line 2</label>
<input name="addresses[1].street_line2" id="addresses[1].street_line2" class="form-control" value="Suite 200" placeholder="Apt 4B" type="text" />
<div class="form-text">Apartment, suite, unit, etc.</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[1].city"><i class="bi bi-building"></i> City</label>
<input name="addresses[1].city" id="addresses[1].city" class="form-control" value="Palo Alto" maxlength="100" placeholder="San Francisco" type="text" />
<div class="form-text">City name</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[1].state">State/Province</label>
<input name="addresses[1].state" id="addresses[1].state" class="form-control" value="CA" maxlength="50" placeholder="CA" type="text" />
<div class="form-text">State or province</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="addresses[1].postal_code"><i class="bi bi-mailbox"></i> Postal Code</label>
<input name="addresses[1].postal_code" id="addresses[1].postal_code" class="form-control" value="94301" maxlength="20" placeholder="94105" type="text" />
<div class="form-text">ZIP or postal code</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="addresses[1].country" class="form-label">Country</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-globe"></i></span>
<select name="addresses[1].country" id="addresses[1].country" class="form-select"><option value="US" selected>πΊπΈ United States</option>
<option value="CA">π¨π¦ Canada</option>
<option value="UK">π¬π§ United Kingdom</option>
<option value="AU">π¦πΊ Australia</option>
<option value="DE">π©πͺ Germany</option>
<option value="FR">π«π· France</option>
<option value="JP">π―π΅ Japan</option></select>
</div>
<div class="form-text">Country</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="addresses">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add multiple addresses</div>
</div>
<div class="mb-3"><label for="notes"><i class="bi bi-sticky"></i> Notes</label>
<textarea name="notes" id="notes" class="form-control" placeholder="Additional notes about this contact...">Prefers email communication. Available Monday-Friday 9am-5pm PST.</textarea>
<div class="form-text">Any additional information</div></div></div>
</div>
<div id="tab-1"
class="tab-panel"
role="tabpanel"
style="display: none;"
aria-hidden="true">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="text_input"><i class="bi bi-fonts"></i> Text Input *</label>
<input name="text_input" id="text_input" class="form-control" value="Sample text value" required="required" maxlength="100" placeholder="Enter any text" type="text" />
<div class="form-text">Standard text input field</div></div>
<div class="mb-3"><label for="email_input"><i class="bi bi-envelope-at"></i> Email Input *</label>
<input name="email_input" id="email_input" class="form-control" value="user@example.com" required="required" placeholder="user@example.com" inputmode="email" type="email" />
<div class="form-text">Email address with validation</div></div>
<div class="mb-3"><label for="password_input"><i class="bi bi-key"></i> Password Input *</label>
<input name="password_input" id="password_input" class="form-control" value="SecurePass123!" required="required" minlength="8" placeholder="Enter password" autocomplete="new-password" type="password" />
<div class="form-text">Password field (masked input)</div></div>
<div class="mb-3"><label for="search_input"><i class="bi bi-search"></i> Search Input *</label>
<input name="search_input" id="search_input" class="form-control" value="search query" required="required" placeholder="Search..." inputmode="search" type="search" />
<div class="form-text">Search field with special styling</div></div>
<div class="mb-3"><label for="url_input"><i class="bi bi-link-45deg"></i> URL Input *</label>
<input name="url_input" id="url_input" class="form-control" value="https://example.com" required="required" placeholder="https://example.com" inputmode="url" pattern="https?://.+" type="url" />
<div class="form-text">URL field with validation</div></div>
<div class="mb-3"><label for="tel_input"><i class="bi bi-telephone"></i> Telephone Input *</label>
<input name="tel_input" id="tel_input" class="form-control" value="+1-555-987-6543" required="required" placeholder="+1-555-123-4567" inputmode="tel" autocomplete="tel" type="tel" />
<div class="form-text">Telephone number input</div></div>
<div class="mb-3"><label for="textarea_input"><i class="bi bi-textarea-t"></i> Text Area *</label>
<textarea name="textarea_input" id="textarea_input" class="form-control" required="required" maxlength="500" placeholder="Enter multiple lines of text...">This is a multi-line
text area
with sample content.</textarea>
<div class="form-text">Multi-line text input</div></div>
<div class="mb-3"><label for="number_input"><i class="bi bi-123"></i> Number Input (Integer)</label>
<input name="number_input" id="number_input" class="form-control" value="42" min="0" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Integer number input</div></div>
<div class="mb-3"><label for="decimal_input"><i class="bi bi-calculator"></i> Decimal Input (Float)</label>
<input name="decimal_input" id="decimal_input" class="form-control" value="3.14159" min="0.0" max="999.99" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Floating-point number input</div></div>
<div class="mb-3"><label for="range_input"><i class="bi bi-sliders"></i> Range Slider</label>
<input name="range_input" id="range_input" class="form-control" value="75" min="1" max="5" step="1" type="range" />
<div class="star-rating" id="range_input-stars">
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const range = document.getElementById('range_input');
const stars = document.getElementById('range_input-stars');
if (range && stars) {
range.addEventListener('input', function() {
const value = parseInt(this.value);
const maxRating = 5;
stars.textContent = 'β
'.repeat(value) + 'β'.repeat(maxRating - value);
});
}
});
</script>
<div class="form-text">Slider for selecting a value</div></div>
<div class="mb-3"><div class="mb-3">
<label for="select_input" class="form-label">Select Dropdown</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-ui-checks"></i></span>
<select name="select_input" id="select_input" class="form-select"><option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3" selected>Option 3</option>
<option value="option4">Option 4</option></select>
</div>
<div class="form-text">Single select dropdown</div>
</div></div>
<div class="mb-3"><div class="mb-3">
<label for="radio_input" class="form-label">Radio Buttons</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-ui-radios"></i></span>
<fieldset class="radio-group" class="form-select">
<legend>Radio Buttons</legend>
<div class="radio-item">
<label for="radio_input_0">
<input name="radio_input" id="radio_input_0" type="radio" value="small" class="form-select" />
<span class="radio-label">Small</span>
</label>
</div>
<div class="radio-item">
<label for="radio_input_1">
<input name="radio_input" id="radio_input_1" type="radio" value="medium" class="form-select" />
<span class="radio-label">Medium</span>
</label>
</div>
<div class="radio-item">
<label for="radio_input_2">
<input name="radio_input" id="radio_input_2" type="radio" value="large" class="form-select" />
<span class="radio-label">Large</span>
</label>
</div>
</fieldset>
</div>
<div class="form-text">Radio button group</div>
</div></div>
<div class="mb-3"><div class="mb-3">
<label for="multiselect_input" class="form-label">Multiple Selection</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-list-check"></i></span>
<select name="multiselect_input" id="multiselect_input" class="form-select"><option value="python" selected>π Python</option>
<option value="javascript">π JavaScript</option>
<option value="typescript" selected>π TypeScript</option>
<option value="java">β Java</option>
<option value="go">πΉ Go</option>
<option value="rust" selected>π¦ Rust</option></select>
</div>
<div class="form-text">Select multiple options</div>
</div></div>
<div class="mb-3"><label for="checkbox_input"><i class="bi bi-check-square"></i> Checkbox Input</label>
<input name="checkbox_input" id="checkbox_input" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Boolean checkbox</div></div>
<div class="mb-3"><label for="toggle_input"><i class="bi bi-toggle-on"></i> Toggle Switch</label>
<input name="toggle_input" id="toggle_input" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Boolean toggle switch</div></div>
<div class="mb-3"><label for="date_input"><i class="bi bi-calendar-date"></i> Date Input *</label>
<div class="birthdate-input-group"><input name="date_input" id="date_input" class="form-control" value="2024-06-15" required="required" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="date_input_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('date_input');
const ageDisplay = document.getElementById('date_input_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">Date picker</div></div>
<div class="mb-3"><label for="time_input"><i class="bi bi-clock"></i> Time Input</label>
<input name="time_input" id="time_input" class="form-control" value="14:30" step="60" type="time" />
<div class="form-text">Time picker</div></div>
<div class="mb-3"><label for="datetime_input"><i class="bi bi-calendar-event"></i> DateTime Input</label>
<input name="datetime_input" id="datetime_input" class="form-control" value="2024-06-15T14:30:00" type="datetime-local" />
<div class="form-text">Date and time picker</div></div>
<div class="mb-3"><label for="color_input"><i class="bi bi-palette"></i> Color Picker</label>
<div class="color-input-group"><input name="color_input" id="color_input" class="form-control" value="#e74c3c" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_input_value" style="font-family: monospace;">#e74c3c</span>
<div id="color_input_swatch" style="width: 20px; height: 20px; background-color: #e74c3c; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_input');
const valueSpan = document.getElementById('color_input_value');
const swatch = document.getElementById('color_input_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Color selection input</div></div>
<div class="mb-3"><!-- Error rendering hidden: CSRFInput.render() missing 1 required positional argument: 'token' --></div></div>
</div>
<div id="tab-2"
class="tab-panel"
role="tabpanel"
style="display: none;"
aria-hidden="true">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="profile_picture_url"><i class="bi bi-person-circle"></i> Profile Picture URL</label>
<input name="profile_picture_url" id="profile_picture_url" class="form-control" value="https://example.com/avatars/user123.jpg" placeholder="https://example.com/avatar.jpg" inputmode="url" pattern="https?://.+" type="url" />
<div class="form-text">URL to profile picture</div></div>
<div class="mb-3"><label for="background_image_url"><i class="bi bi-image"></i> Background Image URL</label>
<input name="background_image_url" id="background_image_url" class="form-control" value="https://example.com/backgrounds/abstract.jpg" placeholder="https://example.com/background.jpg" inputmode="url" pattern="https?://.+" type="url" />
<div class="form-text">URL to background image</div></div>
<div class="mb-3"><label for="favicon_color"><i class="bi bi-palette"></i> Favicon Color</label>
<div class="color-input-group"><input name="favicon_color" id="favicon_color" class="form-control" value="#3498db" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="favicon_color_value" style="font-family: monospace;">#3498db</span>
<div id="favicon_color_swatch" style="width: 20px; height: 20px; background-color: #3498db; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('favicon_color');
const valueSpan = document.getElementById('favicon_color_value');
const swatch = document.getElementById('favicon_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Color for browser favicon</div></div>
<div class="mb-3"><label for="enable_animations"><i class="bi bi-play-circle"></i> Enable Animations</label>
<input name="enable_animations" id="enable_animations" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Show animated transitions?</div></div>
<div class="mb-3"><label for="enable_sound"><i class="bi bi-volume-up"></i> Enable Sound Effects</label>
<input name="enable_sound" id="enable_sound" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Play sound effects?</div></div>
<div class="mb-3"><div class="mb-3">
<label for="video_quality" class="form-label">Default Video Quality</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-film"></i></span>
<select name="video_quality" id="video_quality" class="form-select"><option value="auto">π Auto</option>
<option value="1080p" selected>π¬ 1080p (HD)</option>
<option value="720p">πΉ 720p</option>
<option value="480p">πΊ 480p</option>
<option value="360p">π± 360p</option></select>
</div>
<div class="form-text">Preferred video playback quality</div>
</div></div>
<div class="mb-3"><label for="autoplay_videos"><i class="bi bi-play"></i> Autoplay Videos</label>
<input name="autoplay_videos" id="autoplay_videos" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Automatically play videos?</div></div>
<div class="mb-3 model-list-block" data-field-name="color_themes" data-min-items="0" data-max-items="10">
<label class="form-label fw-bold">Color Themes</label>
<div class="model-list-container" data-field-name="color_themes" data-min-items="0" data-max-items="10">
<div class="model-list-items" id="color_themes-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π¨ {theme_name}"
data-field-name="color_themes">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#color_themes_item_0_content"
aria-expanded="true"
aria-controls="color_themes_item_0_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="color_themes"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="color_themes_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].theme_name"><i class="bi bi-palette"></i> Theme Name</label>
<input name="color_themes[0].theme_name" id="color_themes[0].theme_name" class="form-control" maxlength="50" placeholder="Ocean Blue" type="text" />
<div class="form-text">Name for this color theme</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].primary_color"><i class="bi bi-palette"></i> Primary Color</label>
<div class="color-input-group"><input name="color_themes[0].primary_color" id="color_themes[0].primary_color" class="form-control" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].primary_color_value" style="font-family: monospace;"></span>
<div id="color_themes[0].primary_color_swatch" style="width: 20px; height: 20px; background-color: ; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].primary_color');
const valueSpan = document.getElementById('color_themes[0].primary_color_value');
const swatch = document.getElementById('color_themes[0].primary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Main brand color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].secondary_color"><i class="bi bi-palette"></i> Secondary Color</label>
<div class="color-input-group"><input name="color_themes[0].secondary_color" id="color_themes[0].secondary_color" class="form-control" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].secondary_color_value" style="font-family: monospace;"></span>
<div id="color_themes[0].secondary_color_swatch" style="width: 20px; height: 20px; background-color: ; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].secondary_color');
const valueSpan = document.getElementById('color_themes[0].secondary_color_value');
const swatch = document.getElementById('color_themes[0].secondary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Secondary accent color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].accent_color"><i class="bi bi-palette"></i> Accent Color</label>
<div class="color-input-group"><input name="color_themes[0].accent_color" id="color_themes[0].accent_color" class="form-control" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].accent_color_value" style="font-family: monospace;"></span>
<div id="color_themes[0].accent_color_swatch" style="width: 20px; height: 20px; background-color: ; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].accent_color');
const valueSpan = document.getElementById('color_themes[0].accent_color_value');
const swatch = document.getElementById('color_themes[0].accent_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Highlight color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].background_color"><i class="bi bi-palette"></i> Background Color</label>
<div class="color-input-group"><input name="color_themes[0].background_color" id="color_themes[0].background_color" class="form-control" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].background_color_value" style="font-family: monospace;"></span>
<div id="color_themes[0].background_color_swatch" style="width: 20px; height: 20px; background-color: ; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].background_color');
const valueSpan = document.getElementById('color_themes[0].background_color_value');
const swatch = document.getElementById('color_themes[0].background_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Page background color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].text_color"><i class="bi bi-palette"></i> Text Color</label>
<div class="color-input-group"><input name="color_themes[0].text_color" id="color_themes[0].text_color" class="form-control" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].text_color_value" style="font-family: monospace;"></span>
<div id="color_themes[0].text_color_swatch" style="width: 20px; height: 20px; background-color: ; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].text_color');
const valueSpan = document.getElementById('color_themes[0].text_color_value');
const swatch = document.getElementById('color_themes[0].text_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Primary text color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].is_default">Set as Default</label>
<input name="color_themes[0].is_default" id="color_themes[0].is_default" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Use this as the default theme?</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π¨ {theme_name}"
data-field-name="color_themes">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#color_themes_item_0_content"
aria-expanded="true"
aria-controls="color_themes_item_0_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
π¨ Ocean Blue
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="color_themes"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="color_themes_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].theme_name"><i class="bi bi-palette"></i> Theme Name</label>
<input name="color_themes[0].theme_name" id="color_themes[0].theme_name" class="form-control" value="Ocean Blue" maxlength="50" placeholder="Ocean Blue" type="text" />
<div class="form-text">Name for this color theme</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].primary_color"><i class="bi bi-palette"></i> Primary Color</label>
<div class="color-input-group"><input name="color_themes[0].primary_color" id="color_themes[0].primary_color" class="form-control" value="#3498db" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].primary_color_value" style="font-family: monospace;">#3498db</span>
<div id="color_themes[0].primary_color_swatch" style="width: 20px; height: 20px; background-color: #3498db; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].primary_color');
const valueSpan = document.getElementById('color_themes[0].primary_color_value');
const swatch = document.getElementById('color_themes[0].primary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Main brand color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].secondary_color"><i class="bi bi-palette"></i> Secondary Color</label>
<div class="color-input-group"><input name="color_themes[0].secondary_color" id="color_themes[0].secondary_color" class="form-control" value="#2ecc71" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].secondary_color_value" style="font-family: monospace;">#2ecc71</span>
<div id="color_themes[0].secondary_color_swatch" style="width: 20px; height: 20px; background-color: #2ecc71; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].secondary_color');
const valueSpan = document.getElementById('color_themes[0].secondary_color_value');
const swatch = document.getElementById('color_themes[0].secondary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Secondary accent color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].accent_color"><i class="bi bi-palette"></i> Accent Color</label>
<div class="color-input-group"><input name="color_themes[0].accent_color" id="color_themes[0].accent_color" class="form-control" value="#e74c3c" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].accent_color_value" style="font-family: monospace;">#e74c3c</span>
<div id="color_themes[0].accent_color_swatch" style="width: 20px; height: 20px; background-color: #e74c3c; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].accent_color');
const valueSpan = document.getElementById('color_themes[0].accent_color_value');
const swatch = document.getElementById('color_themes[0].accent_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Highlight color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].background_color"><i class="bi bi-palette"></i> Background Color</label>
<div class="color-input-group"><input name="color_themes[0].background_color" id="color_themes[0].background_color" class="form-control" value="#ffffff" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].background_color_value" style="font-family: monospace;">#ffffff</span>
<div id="color_themes[0].background_color_swatch" style="width: 20px; height: 20px; background-color: #ffffff; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].background_color');
const valueSpan = document.getElementById('color_themes[0].background_color_value');
const swatch = document.getElementById('color_themes[0].background_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Page background color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].text_color"><i class="bi bi-palette"></i> Text Color</label>
<div class="color-input-group"><input name="color_themes[0].text_color" id="color_themes[0].text_color" class="form-control" value="#2c3e50" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[0].text_color_value" style="font-family: monospace;">#2c3e50</span>
<div id="color_themes[0].text_color_swatch" style="width: 20px; height: 20px; background-color: #2c3e50; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[0].text_color');
const valueSpan = document.getElementById('color_themes[0].text_color_value');
const swatch = document.getElementById('color_themes[0].text_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Primary text color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[0].is_default">Set as Default</label>
<input name="color_themes[0].is_default" id="color_themes[0].is_default" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Use this as the default theme?</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="π¨ {theme_name}"
data-field-name="color_themes">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#color_themes_item_1_content"
aria-expanded="true"
aria-controls="color_themes_item_1_content">
<i class="bi bi-chevron-down me-2"></i>
<i class="bi bi-card-list me-2"></i>
π¨ Dark Mode
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="color_themes"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse show" id="color_themes_item_1_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].theme_name"><i class="bi bi-palette"></i> Theme Name</label>
<input name="color_themes[1].theme_name" id="color_themes[1].theme_name" class="form-control" value="Dark Mode" maxlength="50" placeholder="Ocean Blue" type="text" />
<div class="form-text">Name for this color theme</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].primary_color"><i class="bi bi-palette"></i> Primary Color</label>
<div class="color-input-group"><input name="color_themes[1].primary_color" id="color_themes[1].primary_color" class="form-control" value="#1a1a1a" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[1].primary_color_value" style="font-family: monospace;">#1a1a1a</span>
<div id="color_themes[1].primary_color_swatch" style="width: 20px; height: 20px; background-color: #1a1a1a; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[1].primary_color');
const valueSpan = document.getElementById('color_themes[1].primary_color_value');
const swatch = document.getElementById('color_themes[1].primary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Main brand color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].secondary_color"><i class="bi bi-palette"></i> Secondary Color</label>
<div class="color-input-group"><input name="color_themes[1].secondary_color" id="color_themes[1].secondary_color" class="form-control" value="#34495e" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[1].secondary_color_value" style="font-family: monospace;">#34495e</span>
<div id="color_themes[1].secondary_color_swatch" style="width: 20px; height: 20px; background-color: #34495e; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[1].secondary_color');
const valueSpan = document.getElementById('color_themes[1].secondary_color_value');
const swatch = document.getElementById('color_themes[1].secondary_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Secondary accent color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].accent_color"><i class="bi bi-palette"></i> Accent Color</label>
<div class="color-input-group"><input name="color_themes[1].accent_color" id="color_themes[1].accent_color" class="form-control" value="#f39c12" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[1].accent_color_value" style="font-family: monospace;">#f39c12</span>
<div id="color_themes[1].accent_color_swatch" style="width: 20px; height: 20px; background-color: #f39c12; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[1].accent_color');
const valueSpan = document.getElementById('color_themes[1].accent_color_value');
const swatch = document.getElementById('color_themes[1].accent_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Highlight color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].background_color"><i class="bi bi-palette"></i> Background Color</label>
<div class="color-input-group"><input name="color_themes[1].background_color" id="color_themes[1].background_color" class="form-control" value="#0a0a0a" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[1].background_color_value" style="font-family: monospace;">#0a0a0a</span>
<div id="color_themes[1].background_color_swatch" style="width: 20px; height: 20px; background-color: #0a0a0a; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[1].background_color');
const valueSpan = document.getElementById('color_themes[1].background_color_value');
const swatch = document.getElementById('color_themes[1].background_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Page background color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].text_color"><i class="bi bi-palette"></i> Text Color</label>
<div class="color-input-group"><input name="color_themes[1].text_color" id="color_themes[1].text_color" class="form-control" value="#ecf0f1" type="color" />
<div class="color-value-display" style="display: inline-flex; align-items: center; margin-left: 10px;">
<span id="color_themes[1].text_color_value" style="font-family: monospace;">#ecf0f1</span>
<div id="color_themes[1].text_color_swatch" style="width: 20px; height: 20px; background-color: #ecf0f1; border: 1px solid #ccc; margin-left: 5px;"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const colorInput = document.getElementById('color_themes[1].text_color');
const valueSpan = document.getElementById('color_themes[1].text_color_value');
const swatch = document.getElementById('color_themes[1].text_color_swatch');
if (colorInput && valueSpan && swatch) {
colorInput.addEventListener('input', function() {
valueSpan.textContent = this.value;
swatch.style.backgroundColor = this.value;
});
}
});
</script>
</div>
<div class="form-text">Primary text color</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="color_themes[1].is_default">Set as Default</label>
<input name="color_themes[1].is_default" id="color_themes[1].is_default" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Use this as the default theme?</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="color_themes">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Create custom color themes</div>
</div>
<div class="mb-3"><label for="max_upload_size_mb"><i class="bi bi-cloud-upload"></i> Max Upload Size (MB)</label>
<input name="max_upload_size_mb" id="max_upload_size_mb" class="form-control" value="25" min="1" max="5" step="1" type="range" />
<div class="star-rating" id="max_upload_size_mb-stars">
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const range = document.getElementById('max_upload_size_mb');
const stars = document.getElementById('max_upload_size_mb-stars');
if (range && stars) {
range.addEventListener('input', function() {
const value = parseInt(this.value);
const maxRating = 5;
stars.textContent = 'β
'.repeat(value) + 'β'.repeat(maxRating - value);
});
}
});
</script>
<div class="form-text">Maximum file size for uploads</div></div></div>
</div>
<div id="tab-3"
class="tab-panel"
role="tabpanel"
style="display: none;"
aria-hidden="true">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="company_name"><i class="bi bi-building"></i> Company Name *</label>
<input name="company_name" id="company_name" class="form-control" value="TechCorp International" required="required" minlength="2" maxlength="200" placeholder="Enter company name" type="text" />
<div class="form-text">Legal name of the company</div></div>
<div class="mb-3"><label for="company_code"><i class="bi bi-code"></i> Company Code *</label>
<input name="company_code" id="company_code" class="form-control" value="TECH-2024" required="required" minlength="2" maxlength="50" placeholder="e.g., ACME-2024" type="text" />
<div class="form-text">Unique identifier for this company</div></div>
<div class="mb-3"><label for="headquarters_address"><i class="bi bi-map-marker"></i> Headquarters Address *</label>
<textarea name="headquarters_address" id="headquarters_address" class="form-control" required="required" maxlength="500" placeholder="Full address of headquarters">123 Innovation Drive, San Francisco, CA 94105</textarea>
<div class="form-text">Main office address</div></div>
<div class="mb-3"><label for="ceo_name"><i class="bi bi-star"></i> CEO Name *</label>
<input name="ceo_name" id="ceo_name" class="form-control" value="Jane Smith" required="required" maxlength="100" placeholder="Name of the CEO" type="text" />
<div class="form-text">Chief Executive Officer</div></div>
<div class="mb-3"><label for="ceo_email">CEO Email *</label>
<input name="ceo_email" id="ceo_email" class="form-control" value="jane.smith@techcorp.com" required="required" placeholder="ceo@company.com" inputmode="email" type="email" />
<div class="form-text">Email address of the CEO</div></div>
<div class="mb-3"><label for="founded_date">Founded Date *</label>
<div class="birthdate-input-group"><input name="founded_date" id="founded_date" class="form-control" value="2010-01-15" required="required" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="founded_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('founded_date');
const ageDisplay = document.getElementById('founded_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was the company founded?</div></div>
<div class="mb-3"><label for="employee_count"><i class="bi bi-people"></i> Total Employees</label>
<input name="employee_count" id="employee_count" class="form-control" value="5000" min="1" max="1000000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total number of employees</div></div>
<div class="mb-3"><label for="annual_revenue"><i class="bi bi-cash-coin"></i> Annual Revenue ($)</label>
<input name="annual_revenue" id="annual_revenue" class="form-control" value="500000000.0" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Company annual revenue in USD</div></div>
<div class="mb-3"><label for="website"><i class="bi bi-globe"></i> Company Website</label>
<input name="website" id="website" class="form-control" value="https://www.techcorp.com" placeholder="https://www.example.com" type="text" />
<div class="form-text">Company website URL</div></div>
<div class="mb-3 model-list-block" data-field-name="departments" data-min-items="1" data-max-items="500">
<label class="form-label fw-bold">Company Departments</label>
<div class="model-list-container" data-field-name="departments" data-min-items="1" data-max-items="500">
<div class="model-list-items" id="departments-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π’ {name} (Head: {department_head})"
data-field-name="departments">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_item_0_content"
aria-expanded="false"
aria-controls="departments_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].name"><i class="bi bi-building"></i> Department Name</label>
<input name="departments[0].name" id="departments[0].name" class="form-control" minlength="2" maxlength="100" placeholder="e.g., Engineering, Sales" type="text" />
<div class="form-text">Name of the department</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].description">Department Description</label>
<textarea name="departments[0].description" id="departments[0].description" class="form-control" placeholder="What does this department do?"></textarea>
<div class="form-text">Description of department responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].department_head"><i class="bi bi-crown"></i> Department Head</label>
<input name="departments[0].department_head" id="departments[0].department_head" class="form-control" maxlength="100" placeholder="Head of department name" type="text" />
<div class="form-text">Who leads this department?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].head_email">Department Head Email</label>
<input name="departments[0].head_email" id="departments[0].head_email" class="form-control" placeholder="head@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email for the department head</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].established_date">Established Date</label>
<div class="birthdate-input-group"><input name="departments[0].established_date" id="departments[0].established_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].established_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].established_date');
const ageDisplay = document.getElementById('departments[0].established_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this department established?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].budget"><i class="bi bi-cash-coin"></i> Annual Budget ($)</label>
<input name="departments[0].budget" id="departments[0].budget" class="form-control" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Department annual budget in USD</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams" data-min-items="1" data-max-items="50">
<label class="form-label fw-bold">Teams</label>
<div class="model-list-container" data-field-name="departments[0].teams" data-min-items="1" data-max-items="50">
<div class="model-list-items" id="departments[0].teams-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π₯ {name} (Lead: {team_lead})"
data-field-name="departments[0].teams">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].name"><i class="bi bi-people"></i> Team Name</label>
<input name="departments[0].teams[0].name" id="departments[0].teams[0].name" class="form-control" minlength="2" maxlength="100" placeholder="e.g., Backend Team" type="text" />
<div class="form-text">Name of the team</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].description">Team Description</label>
<textarea name="departments[0].teams[0].description" id="departments[0].teams[0].description" class="form-control" placeholder="What does this team do?"></textarea>
<div class="form-text">Brief description of the team's responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].team_lead"><i class="bi bi-star"></i> Team Lead Name</label>
<input name="departments[0].teams[0].team_lead" id="departments[0].teams[0].team_lead" class="form-control" maxlength="100" placeholder="Name of the team lead" type="text" />
<div class="form-text">Who leads this team?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].formed_date">Formation Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].formed_date" id="departments[0].teams[0].formed_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].formed_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].formed_date');
const ageDisplay = document.getElementById('departments[0].teams[0].formed_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this team formed?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<label class="form-label fw-bold">Team Members</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<div class="model-list-items" id="departments[0].teams[0].members-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add team members and their certifications</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π₯ {name} (Lead: {team_lead})"
data-field-name="departments[0].teams">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].name"><i class="bi bi-people"></i> Team Name</label>
<input name="departments[0].teams[0].name" id="departments[0].teams[0].name" class="form-control" minlength="2" maxlength="100" placeholder="e.g., Backend Team" type="text" />
<div class="form-text">Name of the team</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].description">Team Description</label>
<textarea name="departments[0].teams[0].description" id="departments[0].teams[0].description" class="form-control" placeholder="What does this team do?"></textarea>
<div class="form-text">Brief description of the team's responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].team_lead"><i class="bi bi-star"></i> Team Lead Name</label>
<input name="departments[0].teams[0].team_lead" id="departments[0].teams[0].team_lead" class="form-control" maxlength="100" placeholder="Name of the team lead" type="text" />
<div class="form-text">Who leads this team?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].formed_date">Formation Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].formed_date" id="departments[0].teams[0].formed_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].formed_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].formed_date');
const ageDisplay = document.getElementById('departments[0].teams[0].formed_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this team formed?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<label class="form-label fw-bold">Team Members</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<div class="model-list-items" id="departments[0].teams[0].members-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add team members and their certifications</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Teams within this department and their members</div>
</div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects" data-min-items="0" data-max-items="100">
<label class="form-label fw-bold">Active Projects</label>
<div class="model-list-container" data-field-name="departments[0].projects" data-min-items="0" data-max-items="100">
<div class="model-list-items" id="departments[0].projects-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {name}"
data-field-name="departments[0].projects">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].name"><i class="bi bi-kanban"></i> Project Name</label>
<input name="departments[0].projects[0].name" id="departments[0].projects[0].name" class="form-control" minlength="3" maxlength="200" placeholder="e.g., Mobile App Redesign" type="text" />
<div class="form-text">Name of the project</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].description">Project Description</label>
<textarea name="departments[0].projects[0].description" id="departments[0].projects[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the project"></textarea>
<div class="form-text">What is this project about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].status" class="form-label">Project Status</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-flag"></i></span>
<select name="departments[0].projects[0].status" id="departments[0].projects[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="on_hold">βΈοΈ On Hold</option>
<option value="completed">β
Completed</option>
<option value="archived">π¦ Archived</option></select>
</div>
<div class="form-text">Current project status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].start_date">Project Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].start_date" id="departments[0].projects[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this project start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].target_end_date">Target End Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].target_end_date" id="departments[0].projects[0].target_end_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].target_end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].target_end_date');
const ageDisplay = document.getElementById('departments[0].projects[0].target_end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this project be completed?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].budget"><i class="bi bi-cash-coin"></i> Budget ($)</label>
<input name="departments[0].projects[0].budget" id="departments[0].projects[0].budget" class="form-control" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Project budget in USD</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].project_manager"><i class="bi bi-person-badge"></i> Project Manager</label>
<input name="departments[0].projects[0].project_manager" id="departments[0].projects[0].project_manager" class="form-control" maxlength="100" placeholder="PM name" type="text" />
<div class="form-text">Who is managing this project?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<label class="form-label fw-bold">Project Tasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<div class="model-list-items" id="departments[0].projects[0].tasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add tasks with subtasks to organize project work</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {name}"
data-field-name="departments[0].projects">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].name"><i class="bi bi-kanban"></i> Project Name</label>
<input name="departments[0].projects[0].name" id="departments[0].projects[0].name" class="form-control" minlength="3" maxlength="200" placeholder="e.g., Mobile App Redesign" type="text" />
<div class="form-text">Name of the project</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].description">Project Description</label>
<textarea name="departments[0].projects[0].description" id="departments[0].projects[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the project"></textarea>
<div class="form-text">What is this project about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].status" class="form-label">Project Status</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-flag"></i></span>
<select name="departments[0].projects[0].status" id="departments[0].projects[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="on_hold">βΈοΈ On Hold</option>
<option value="completed">β
Completed</option>
<option value="archived">π¦ Archived</option></select>
</div>
<div class="form-text">Current project status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].start_date">Project Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].start_date" id="departments[0].projects[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this project start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].target_end_date">Target End Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].target_end_date" id="departments[0].projects[0].target_end_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].target_end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].target_end_date');
const ageDisplay = document.getElementById('departments[0].projects[0].target_end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this project be completed?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].budget"><i class="bi bi-cash-coin"></i> Budget ($)</label>
<input name="departments[0].projects[0].budget" id="departments[0].projects[0].budget" class="form-control" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Project budget in USD</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].project_manager"><i class="bi bi-person-badge"></i> Project Manager</label>
<input name="departments[0].projects[0].project_manager" id="departments[0].projects[0].project_manager" class="form-control" maxlength="100" placeholder="PM name" type="text" />
<div class="form-text">Who is managing this project?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<label class="form-label fw-bold">Project Tasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<div class="model-list-items" id="departments[0].projects[0].tasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add tasks with subtasks to organize project work</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Projects managed by this department</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π’ {name} (Head: {department_head})"
data-field-name="departments">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_item_0_content"
aria-expanded="false"
aria-controls="departments_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π’ Engineering (Head: John Doe)
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].name"><i class="bi bi-building"></i> Department Name</label>
<input name="departments[0].name" id="departments[0].name" class="form-control" value="Engineering" minlength="2" maxlength="100" placeholder="e.g., Engineering, Sales" type="text" />
<div class="form-text">Name of the department</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].description">Department Description</label>
<textarea name="departments[0].description" id="departments[0].description" class="form-control" placeholder="What does this department do?">Software development and infrastructure</textarea>
<div class="form-text">Description of department responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].department_head"><i class="bi bi-crown"></i> Department Head</label>
<input name="departments[0].department_head" id="departments[0].department_head" class="form-control" value="John Doe" maxlength="100" placeholder="Head of department name" type="text" />
<div class="form-text">Who leads this department?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].head_email">Department Head Email</label>
<input name="departments[0].head_email" id="departments[0].head_email" class="form-control" value="john.doe@techcorp.com" placeholder="head@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email for the department head</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].established_date">Established Date</label>
<div class="birthdate-input-group"><input name="departments[0].established_date" id="departments[0].established_date" class="form-control" value="2010-06-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].established_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].established_date');
const ageDisplay = document.getElementById('departments[0].established_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this department established?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].budget"><i class="bi bi-cash-coin"></i> Annual Budget ($)</label>
<input name="departments[0].budget" id="departments[0].budget" class="form-control" value="50000000.0" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Department annual budget in USD</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams" data-min-items="1" data-max-items="50">
<label class="form-label fw-bold">Teams</label>
<div class="model-list-container" data-field-name="departments[0].teams" data-min-items="1" data-max-items="50">
<div class="model-list-items" id="departments[0].teams-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π₯ {name} (Lead: {team_lead})"
data-field-name="departments[0].teams">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].name"><i class="bi bi-people"></i> Team Name</label>
<input name="departments[0].teams[0].name" id="departments[0].teams[0].name" class="form-control" minlength="2" maxlength="100" placeholder="e.g., Backend Team" type="text" />
<div class="form-text">Name of the team</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].description">Team Description</label>
<textarea name="departments[0].teams[0].description" id="departments[0].teams[0].description" class="form-control" placeholder="What does this team do?"></textarea>
<div class="form-text">Brief description of the team's responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].team_lead"><i class="bi bi-star"></i> Team Lead Name</label>
<input name="departments[0].teams[0].team_lead" id="departments[0].teams[0].team_lead" class="form-control" maxlength="100" placeholder="Name of the team lead" type="text" />
<div class="form-text">Who leads this team?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].formed_date">Formation Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].formed_date" id="departments[0].teams[0].formed_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].formed_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].formed_date');
const ageDisplay = document.getElementById('departments[0].teams[0].formed_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this team formed?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<label class="form-label fw-bold">Team Members</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<div class="model-list-items" id="departments[0].teams[0].members-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add team members and their certifications</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π₯ {name} (Lead: {team_lead})"
data-field-name="departments[0].teams">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π₯ Backend Services (Lead: Alice Johnson)
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].name"><i class="bi bi-people"></i> Team Name</label>
<input name="departments[0].teams[0].name" id="departments[0].teams[0].name" class="form-control" value="Backend Services" minlength="2" maxlength="100" placeholder="e.g., Backend Team" type="text" />
<div class="form-text">Name of the team</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].description">Team Description</label>
<textarea name="departments[0].teams[0].description" id="departments[0].teams[0].description" class="form-control" placeholder="What does this team do?">API and database services</textarea>
<div class="form-text">Brief description of the team's responsibilities</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].team_lead"><i class="bi bi-star"></i> Team Lead Name</label>
<input name="departments[0].teams[0].team_lead" id="departments[0].teams[0].team_lead" class="form-control" value="Alice Johnson" maxlength="100" placeholder="Name of the team lead" type="text" />
<div class="form-text">Who leads this team?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].formed_date">Formation Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].formed_date" id="departments[0].teams[0].formed_date" class="form-control" value="2015-03-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].formed_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].formed_date');
const ageDisplay = document.getElementById('departments[0].teams[0].formed_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this team formed?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<label class="form-label fw-bold">Team Members</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members" data-min-items="1" data-max-items="100">
<div class="model-list-items" id="departments[0].teams[0].members-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π€ {name} - {role}"
data-field-name="departments[0].teams[0].members">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π€ Bob Wilson - Senior Backend Developer
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].name"><i class="bi bi-person"></i> Member Name</label>
<input name="departments[0].teams[0].members[0].name" id="departments[0].teams[0].members[0].name" class="form-control" value="Bob Wilson" minlength="2" maxlength="100" placeholder="Enter full name" type="text" />
<div class="form-text">Full name of the team member</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].email">Email Address</label>
<input name="departments[0].teams[0].members[0].email" id="departments[0].teams[0].members[0].email" class="form-control" value="bob.wilson@techcorp.com" placeholder="member@company.com" inputmode="email" type="email" />
<div class="form-text">Contact email address</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].role"><i class="bi bi-briefcase"></i> Role</label>
<input name="departments[0].teams[0].members[0].role" id="departments[0].teams[0].members[0].role" class="form-control" value="Senior Backend Developer" maxlength="100" placeholder="e.g., Senior Developer" type="text" />
<div class="form-text">Job title or role</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].hire_date">Hire Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].hire_date" id="departments[0].teams[0].members[0].hire_date" class="form-control" value="2016-01-15" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].hire_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].hire_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].hire_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When did this person join?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].experience_years"><i class="bi bi-hourglass-split"></i> Years of Experience</label>
<input name="departments[0].teams[0].members[0].experience_years" id="departments[0].teams[0].members[0].experience_years" class="form-control" value="12" min="0" max="70" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Total professional experience in years</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].manager">Manager Name</label>
<input name="departments[0].teams[0].members[0].manager" id="departments[0].teams[0].members[0].manager" class="form-control" value="Alice Johnson" placeholder="Direct manager name" type="text" />
<div class="form-text">Who supervises this team member?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Certifications</label>
<div class="model-list-container" data-field-name="departments[0].teams[0].members[0].certifications" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="departments[0].teams[0].members[0].certifications-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_0_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
AWS Solutions Architect Professional - Amazon Web Services
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[0].name" id="departments[0].teams[0].members[0].certifications[0].name" class="form-control" value="AWS Solutions Architect Professional" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[0].issuer" id="departments[0].teams[0].members[0].certifications[0].issuer" class="form-control" value="Amazon Web Services" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].issue_date" id="departments[0].teams[0].members[0].certifications[0].issue_date" class="form-control" value="2022-05-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[0].expiry_date" id="departments[0].teams[0].members[0].certifications[0].expiry_date" class="form-control" value="2025-05-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[0].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[0].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_id" id="departments[0].teams[0].members[0].certifications[0].credential_id" class="form-control" value="AWS-12345" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[0].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[0].credential_url" id="departments[0].teams[0].members[0].certifications[0].credential_url" class="form-control" value="https://aws.amazon.com/verification/12345" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="{name} - {issuer}"
data-field-name="departments[0].teams[0].members[0].certifications">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__teams_0__members_0__certifications_item_1_content"
aria-expanded="false"
aria-controls="departments_0__teams_0__members_0__certifications_item_1_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Certified Kubernetes Administrator - Cloud Native Computing Foundation
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="departments[0].teams[0].members[0].certifications"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__teams_0__members_0__certifications_item_1_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].name"><i class="bi bi-award"></i> Certification Name</label>
<input name="departments[0].teams[0].members[0].certifications[1].name" id="departments[0].teams[0].members[0].certifications[1].name" class="form-control" value="Certified Kubernetes Administrator" maxlength="100" placeholder="e.g., AWS Solutions Architect" type="text" />
<div class="form-text">Name of the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].issuer"><i class="bi bi-building"></i> Issuing Organization</label>
<input name="departments[0].teams[0].members[0].certifications[1].issuer" id="departments[0].teams[0].members[0].certifications[1].issuer" class="form-control" value="Cloud Native Computing Foundation" maxlength="100" placeholder="e.g., Amazon Web Services" type="text" />
<div class="form-text">Organization that issued the certification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].issue_date">Issue Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[1].issue_date" id="departments[0].teams[0].members[0].certifications[1].issue_date" class="form-control" value="2023-01-15" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[1].issue_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[1].issue_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[1].issue_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When was this certification issued?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].expiry_date">Expiry Date</label>
<div class="birthdate-input-group"><input name="departments[0].teams[0].members[0].certifications[1].expiry_date" id="departments[0].teams[0].members[0].certifications[1].expiry_date" class="form-control" value="2026-01-15" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].teams[0].members[0].certifications[1].expiry_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].teams[0].members[0].certifications[1].expiry_date');
const ageDisplay = document.getElementById('departments[0].teams[0].members[0].certifications[1].expiry_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this certification expire? (Leave empty if no expiry)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].credential_id">Credential ID</label>
<input name="departments[0].teams[0].members[0].certifications[1].credential_id" id="departments[0].teams[0].members[0].certifications[1].credential_id" class="form-control" value="CKA-67890" placeholder="Optional credential identifier" type="text" />
<div class="form-text">Unique ID for credential verification</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].teams[0].members[0].certifications[1].credential_url">Credential URL</label>
<input name="departments[0].teams[0].members[0].certifications[1].credential_url" id="departments[0].teams[0].members[0].certifications[1].credential_url" class="form-control" value="https://cncf.io/verify/67890" placeholder="https://..." type="text" />
<div class="form-text">Link to verify the credential</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members[0].certifications">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Professional certifications and credentials</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams[0].members">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add team members and their certifications</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].teams">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Teams within this department and their members</div>
</div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects" data-min-items="0" data-max-items="100">
<label class="form-label fw-bold">Active Projects</label>
<div class="model-list-container" data-field-name="departments[0].projects" data-min-items="0" data-max-items="100">
<div class="model-list-items" id="departments[0].projects-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {name}"
data-field-name="departments[0].projects">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].name"><i class="bi bi-kanban"></i> Project Name</label>
<input name="departments[0].projects[0].name" id="departments[0].projects[0].name" class="form-control" minlength="3" maxlength="200" placeholder="e.g., Mobile App Redesign" type="text" />
<div class="form-text">Name of the project</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].description">Project Description</label>
<textarea name="departments[0].projects[0].description" id="departments[0].projects[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the project"></textarea>
<div class="form-text">What is this project about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].status" class="form-label">Project Status</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-flag"></i></span>
<select name="departments[0].projects[0].status" id="departments[0].projects[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="on_hold">βΈοΈ On Hold</option>
<option value="completed">β
Completed</option>
<option value="archived">π¦ Archived</option></select>
</div>
<div class="form-text">Current project status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].start_date">Project Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].start_date" id="departments[0].projects[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this project start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].target_end_date">Target End Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].target_end_date" id="departments[0].projects[0].target_end_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].target_end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].target_end_date');
const ageDisplay = document.getElementById('departments[0].projects[0].target_end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this project be completed?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].budget"><i class="bi bi-cash-coin"></i> Budget ($)</label>
<input name="departments[0].projects[0].budget" id="departments[0].projects[0].budget" class="form-control" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Project budget in USD</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].project_manager"><i class="bi bi-person-badge"></i> Project Manager</label>
<input name="departments[0].projects[0].project_manager" id="departments[0].projects[0].project_manager" class="form-control" maxlength="100" placeholder="PM name" type="text" />
<div class="form-text">Who is managing this project?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<label class="form-label fw-bold">Project Tasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<div class="model-list-items" id="departments[0].projects[0].tasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add tasks with subtasks to organize project work</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {name}"
data-field-name="departments[0].projects">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π Microservices Migration
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].name"><i class="bi bi-kanban"></i> Project Name</label>
<input name="departments[0].projects[0].name" id="departments[0].projects[0].name" class="form-control" value="Microservices Migration" minlength="3" maxlength="200" placeholder="e.g., Mobile App Redesign" type="text" />
<div class="form-text">Name of the project</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].description">Project Description</label>
<textarea name="departments[0].projects[0].description" id="departments[0].projects[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the project">Migrate monolithic application to microservices architecture</textarea>
<div class="form-text">What is this project about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].status" class="form-label">Project Status</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-flag"></i></span>
<select name="departments[0].projects[0].status" id="departments[0].projects[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress" selected>π In Progress</option>
<option value="on_hold">βΈοΈ On Hold</option>
<option value="completed">β
Completed</option>
<option value="archived">π¦ Archived</option></select>
</div>
<div class="form-text">Current project status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].start_date">Project Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].start_date" id="departments[0].projects[0].start_date" class="form-control" value="2024-01-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this project start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].target_end_date">Target End Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].target_end_date" id="departments[0].projects[0].target_end_date" class="form-control" value="2024-12-31" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].target_end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].target_end_date');
const ageDisplay = document.getElementById('departments[0].projects[0].target_end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this project be completed?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].budget"><i class="bi bi-cash-coin"></i> Budget ($)</label>
<input name="departments[0].projects[0].budget" id="departments[0].projects[0].budget" class="form-control" value="2000000.0" min="0" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Project budget in USD</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].project_manager"><i class="bi bi-person-badge"></i> Project Manager</label>
<input name="departments[0].projects[0].project_manager" id="departments[0].projects[0].project_manager" class="form-control" value="Carol Lee" maxlength="100" placeholder="PM name" type="text" />
<div class="form-text">Who is managing this project?</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<label class="form-label fw-bold">Project Tasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks" data-min-items="1" data-max-items="200">
<div class="model-list-items" id="departments[0].projects[0].tasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task"></textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high">π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress">π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {title}"
data-field-name="departments[0].projects[0].tasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π Refactor Auth Service
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].title"><i class="bi bi-bookmark"></i> Task Title</label>
<input name="departments[0].projects[0].tasks[0].title" id="departments[0].projects[0].tasks[0].title" class="form-control" value="Refactor Auth Service" minlength="3" maxlength="200" placeholder="Brief task name" type="text" />
<div class="form-text">What is this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].description">Task Description</label>
<textarea name="departments[0].projects[0].tasks[0].description" id="departments[0].projects[0].tasks[0].description" class="form-control" maxlength="2000" placeholder="Detailed description of the task">Extract authentication into standalone microservice</textarea>
<div class="form-text">Full description of what needs to be done</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].priority" class="form-label">Priority Level</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-exclamation-circle"></i></span>
<select name="departments[0].projects[0].tasks[0].priority" id="departments[0].projects[0].tasks[0].priority" class="form-select"><option value="low">π’ Low</option>
<option value="medium">π‘ Medium</option>
<option value="high" selected>π΄ High</option>
<option value="critical">β Critical</option></select>
</div>
<div class="form-text">Task priority level</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].status" class="form-label">Task Status</label>
<select name="departments[0].projects[0].tasks[0].status" id="departments[0].projects[0].tasks[0].status" class="form-select"><option value="planning">π Planning</option>
<option value="in_progress" selected>π In Progress</option>
<option value="in_review">π In Review</option>
<option value="completed">β
Completed</option>
<option value="cancelled">β Cancelled</option></select>
<div class="form-text">Current task status</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].start_date">Start Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].start_date" id="departments[0].projects[0].tasks[0].start_date" class="form-control" value="2024-02-01" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].start_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should this task start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].due_date">Due Date</label>
<div class="birthdate-input-group"><input name="departments[0].projects[0].tasks[0].due_date" id="departments[0].projects[0].tasks[0].due_date" class="form-control" value="2024-03-31" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="departments[0].projects[0].tasks[0].due_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('departments[0].projects[0].tasks[0].due_date');
const ageDisplay = document.getElementById('departments[0].projects[0].tasks[0].due_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When is this task due?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].assigned_to">Assigned To</label>
<input name="departments[0].projects[0].tasks[0].assigned_to" id="departments[0].projects[0].tasks[0].assigned_to" class="form-control" value="Bob Wilson" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this task?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].estimated_hours" class="form-control" value="120.0" min="0.5" max="1000" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete (in hours)</div></div>
</div>
<div class="col-12">
<div class="mb-3 model-list-block" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Subtasks</label>
<div class="model-list-container" data-field-name="departments[0].projects[0].tasks[0].subtasks" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="departments[0].projects[0].tasks[0].subtasks-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask"></textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed">β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="πΉ {title}"
data-field-name="departments[0].projects[0].tasks[0].subtasks">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#departments_0__projects_0__tasks_0__subtasks_item_0_content"
aria-expanded="false"
aria-controls="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
πΉ Create service skeleton
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="departments[0].projects[0].tasks[0].subtasks"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="departments_0__projects_0__tasks_0__subtasks_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].title"><i class="bi bi-list-check"></i> Subtask Title</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].title" id="departments[0].projects[0].tasks[0].subtasks[0].title" class="form-control" value="Create service skeleton" maxlength="200" placeholder="Brief description of the subtask" type="text" />
<div class="form-text">What is this subtask about?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].description">Description</label>
<textarea name="departments[0].projects[0].tasks[0].subtasks[0].description" id="departments[0].projects[0].tasks[0].subtasks[0].description" class="form-control" placeholder="Detailed description of the subtask">Set up FastAPI project structure</textarea>
<div class="form-text">Additional details about this subtask</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].assigned_to"><i class="bi bi-person"></i> Assigned To</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" id="departments[0].projects[0].tasks[0].subtasks[0].assigned_to" class="form-control" value="Bob Wilson" maxlength="100" placeholder="Team member name" type="text" />
<div class="form-text">Who is responsible for this subtask?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours"><i class="bi bi-clock"></i> Estimated Hours</label>
<input name="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" id="departments[0].projects[0].tasks[0].subtasks[0].estimated_hours" class="form-control" value="16.0" min="0.5" max="100" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">Estimated time to complete</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-label">Status</label>
<select name="departments[0].projects[0].tasks[0].subtasks[0].status" id="departments[0].projects[0].tasks[0].subtasks[0].status" class="form-select"><option value="pending">β³ Pending</option>
<option value="in_progress">π In Progress</option>
<option value="completed" selected>β
Completed</option>
<option value="blocked">π« Blocked</option></select>
<div class="form-text">Current status of the subtask</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks[0].subtasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Break down this task into smaller subtasks</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects[0].tasks">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Add tasks with subtasks to organize project work</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments[0].projects">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Projects managed by this department</div>
</div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="departments">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Organize departments with teams, members, and projects</div>
</div>
</div>
</div>
<div id="tab-4"
class="tab-panel"
role="tabpanel"
style="display: none;"
aria-hidden="true">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="calendar_name"><i class="bi bi-calendar3"></i> Calendar Name *</label>
<input name="calendar_name" id="calendar_name" class="form-control" value="Work Calendar" required="required" maxlength="100" placeholder="Work Calendar" type="text" />
<div class="form-text">Name for this calendar</div></div>
<div class="mb-3"><div class="mb-3">
<label for="timezone" class="form-label">Timezone</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-bi bi-globe"></i></span>
<select name="timezone" id="timezone" class="form-select"><option value="America/New_York">π Eastern (ET)</option>
<option value="America/Chicago">π Central (CT)</option>
<option value="America/Denver">ποΈ Mountain (MT)</option>
<option value="America/Los_Angeles" selected>π΄ Pacific (PT)</option>
<option value="Europe/London">π¬π§ London (GMT)</option>
<option value="Europe/Paris">π«π· Paris (CET)</option>
<option value="Asia/Tokyo">π―π΅ Tokyo (JST)</option></select>
</div>
<div class="form-text">Your timezone</div>
</div></div>
<div class="mb-3"><label for="default_event_duration"><i class="bi bi-clock"></i> Default Event Duration (minutes)</label>
<input name="default_event_duration" id="default_event_duration" class="form-control" value="60" min="1" max="5" step="1" type="range" />
<div class="star-rating" id="default_event_duration-stars">
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const range = document.getElementById('default_event_duration');
const stars = document.getElementById('default_event_duration-stars');
if (range && stars) {
range.addEventListener('input', function() {
const value = parseInt(this.value);
const maxRating = 5;
stars.textContent = 'β
'.repeat(value) + 'β'.repeat(maxRating - value);
});
}
});
</script>
<div class="form-text">Default length for new events</div></div>
<div class="mb-3"><label for="work_start_time"><i class="bi bi-sunrise"></i> Work Start Time</label>
<input name="work_start_time" id="work_start_time" class="form-control" value="09:00" step="60" type="time" />
<div class="form-text">When does your workday start?</div></div>
<div class="mb-3"><label for="work_end_time"><i class="bi bi-sunset"></i> Work End Time</label>
<input name="work_end_time" id="work_end_time" class="form-control" value="17:00" step="60" type="time" />
<div class="form-text">When does your workday end?</div></div>
<div class="mb-3"><div class="mb-3">
<label for="weekend_days" class="form-label">Weekend Days</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-calendar-x"></i></span>
<select name="weekend_days" id="weekend_days" class="form-select"><option value="sunday" selected>Sunday</option>
<option value="monday">Monday</option>
<option value="tuesday">Tuesday</option>
<option value="wednesday">Wednesday</option>
<option value="thursday">Thursday</option>
<option value="friday">Friday</option>
<option value="saturday" selected>Saturday</option></select>
</div>
<div class="form-text">Select your non-working days</div>
</div></div>
<div class="mb-3 model-list-block" data-field-name="recurring_events" data-min-items="0" data-max-items="50">
<label class="form-label fw-bold">Recurring Events</label>
<div class="model-list-container" data-field-name="recurring_events" data-min-items="0" data-max-items="50">
<div class="model-list-items" id="recurring_events-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {event_name} ({recurrence_pattern})"
data-field-name="recurring_events">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#recurring_events_item_0_content"
aria-expanded="false"
aria-controls="recurring_events_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="recurring_events"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="recurring_events_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].event_name"><i class="bi bi-calendar-event"></i> Event Name</label>
<input name="recurring_events[0].event_name" id="recurring_events[0].event_name" class="form-control" maxlength="200" placeholder="Weekly Team Meeting" type="text" />
<div class="form-text">Name of the recurring event</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[0].event_type" class="form-label">Event Type</label>
<select name="recurring_events[0].event_type" id="recurring_events[0].event_type" class="form-select"><option value="meeting">π€ Meeting</option>
<option value="reminder">β° Reminder</option>
<option value="deadline">π
Deadline</option>
<option value="birthday">π Birthday</option>
<option value="anniversary">π Anniversary</option>
<option value="other">π Other</option></select>
<div class="form-text">Type of event</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].start_date"><i class="bi bi-calendar-check"></i> Start Date</label>
<div class="birthdate-input-group"><input name="recurring_events[0].start_date" id="recurring_events[0].start_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[0].start_date');
const ageDisplay = document.getElementById('recurring_events[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this event start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].start_time"><i class="bi bi-clock"></i> Start Time</label>
<input name="recurring_events[0].start_time" id="recurring_events[0].start_time" class="form-control" step="60" type="time" />
<div class="form-text">Event start time (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].duration_minutes"><i class="bi bi-hourglass"></i> Duration (minutes)</label>
<input name="recurring_events[0].duration_minutes" id="recurring_events[0].duration_minutes" class="form-control" min="15" max="1440" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">How long is the event?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[0].recurrence_pattern" class="form-label">Recurrence Pattern</label>
<select name="recurring_events[0].recurrence_pattern" id="recurring_events[0].recurrence_pattern" class="form-select"><option value="daily">π Daily</option>
<option value="weekly">π
Weekly</option>
<option value="biweekly">π
π
Bi-weekly</option>
<option value="monthly">π Monthly</option>
<option value="yearly">ποΈ Yearly</option></select>
<div class="form-text">How often does this repeat?</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].end_date">End Date</label>
<div class="birthdate-input-group"><input name="recurring_events[0].end_date" id="recurring_events[0].end_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[0].end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[0].end_date');
const ageDisplay = document.getElementById('recurring_events[0].end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should recurrence stop? (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].location"><i class="bi bi-geo-alt"></i> Location</label>
<input name="recurring_events[0].location" id="recurring_events[0].location" class="form-control" placeholder="Conference Room A" type="text" />
<div class="form-text">Where will this event take place?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].send_reminder"><i class="bi bi-bell"></i> Send Reminder</label>
<input name="recurring_events[0].send_reminder" id="recurring_events[0].send_reminder" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Send notification before event?</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {event_name} ({recurrence_pattern})"
data-field-name="recurring_events">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#recurring_events_item_0_content"
aria-expanded="false"
aria-controls="recurring_events_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π Weekly Team Standup (weekly)
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="recurring_events"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="recurring_events_item_0_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].event_name"><i class="bi bi-calendar-event"></i> Event Name</label>
<input name="recurring_events[0].event_name" id="recurring_events[0].event_name" class="form-control" value="Weekly Team Standup" maxlength="200" placeholder="Weekly Team Meeting" type="text" />
<div class="form-text">Name of the recurring event</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[0].event_type" class="form-label">Event Type</label>
<select name="recurring_events[0].event_type" id="recurring_events[0].event_type" class="form-select"><option value="meeting" selected>π€ Meeting</option>
<option value="reminder">β° Reminder</option>
<option value="deadline">π
Deadline</option>
<option value="birthday">π Birthday</option>
<option value="anniversary">π Anniversary</option>
<option value="other">π Other</option></select>
<div class="form-text">Type of event</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].start_date"><i class="bi bi-calendar-check"></i> Start Date</label>
<div class="birthdate-input-group"><input name="recurring_events[0].start_date" id="recurring_events[0].start_date" class="form-control" value="2024-01-08" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[0].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[0].start_date');
const ageDisplay = document.getElementById('recurring_events[0].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this event start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].start_time"><i class="bi bi-clock"></i> Start Time</label>
<input name="recurring_events[0].start_time" id="recurring_events[0].start_time" class="form-control" value="10:00" step="60" type="time" />
<div class="form-text">Event start time (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].duration_minutes"><i class="bi bi-hourglass"></i> Duration (minutes)</label>
<input name="recurring_events[0].duration_minutes" id="recurring_events[0].duration_minutes" class="form-control" value="30" min="15" max="1440" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">How long is the event?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[0].recurrence_pattern" class="form-label">Recurrence Pattern</label>
<select name="recurring_events[0].recurrence_pattern" id="recurring_events[0].recurrence_pattern" class="form-select"><option value="daily">π Daily</option>
<option value="weekly" selected>π
Weekly</option>
<option value="biweekly">π
π
Bi-weekly</option>
<option value="monthly">π Monthly</option>
<option value="yearly">ποΈ Yearly</option></select>
<div class="form-text">How often does this repeat?</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].end_date">End Date</label>
<div class="birthdate-input-group"><input name="recurring_events[0].end_date" id="recurring_events[0].end_date" class="form-control" value="2024-12-31" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[0].end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[0].end_date');
const ageDisplay = document.getElementById('recurring_events[0].end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should recurrence stop? (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].location"><i class="bi bi-geo-alt"></i> Location</label>
<input name="recurring_events[0].location" id="recurring_events[0].location" class="form-control" value="Conference Room A" placeholder="Conference Room A" type="text" />
<div class="form-text">Where will this event take place?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[0].send_reminder"><i class="bi bi-bell"></i> Send Reminder</label>
<input name="recurring_events[0].send_reminder" id="recurring_events[0].send_reminder" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Send notification before event?</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="π {event_name} ({recurrence_pattern})"
data-field-name="recurring_events">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#recurring_events_item_1_content"
aria-expanded="false"
aria-controls="recurring_events_item_1_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π Monthly All Hands (monthly)
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="recurring_events"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="recurring_events_item_1_content">
<div class="card-body"><div class="row">
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].event_name"><i class="bi bi-calendar-event"></i> Event Name</label>
<input name="recurring_events[1].event_name" id="recurring_events[1].event_name" class="form-control" value="Monthly All Hands" maxlength="200" placeholder="Weekly Team Meeting" type="text" />
<div class="form-text">Name of the recurring event</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[1].event_type" class="form-label">Event Type</label>
<select name="recurring_events[1].event_type" id="recurring_events[1].event_type" class="form-select"><option value="meeting" selected>π€ Meeting</option>
<option value="reminder">β° Reminder</option>
<option value="deadline">π
Deadline</option>
<option value="birthday">π Birthday</option>
<option value="anniversary">π Anniversary</option>
<option value="other">π Other</option></select>
<div class="form-text">Type of event</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].start_date"><i class="bi bi-calendar-check"></i> Start Date</label>
<div class="birthdate-input-group"><input name="recurring_events[1].start_date" id="recurring_events[1].start_date" class="form-control" value="2024-01-15" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[1].start_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[1].start_date');
const ageDisplay = document.getElementById('recurring_events[1].start_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When does this event start?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].start_time"><i class="bi bi-clock"></i> Start Time</label>
<input name="recurring_events[1].start_time" id="recurring_events[1].start_time" class="form-control" value="14:00" step="60" type="time" />
<div class="form-text">Event start time (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].duration_minutes"><i class="bi bi-hourglass"></i> Duration (minutes)</label>
<input name="recurring_events[1].duration_minutes" id="recurring_events[1].duration_minutes" class="form-control" value="90" min="15" max="1440" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">How long is the event?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="recurring_events[1].recurrence_pattern" class="form-label">Recurrence Pattern</label>
<select name="recurring_events[1].recurrence_pattern" id="recurring_events[1].recurrence_pattern" class="form-select"><option value="daily">π Daily</option>
<option value="weekly">π
Weekly</option>
<option value="biweekly">π
π
Bi-weekly</option>
<option value="monthly" selected>π Monthly</option>
<option value="yearly">ποΈ Yearly</option></select>
<div class="form-text">How often does this repeat?</div>
</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].end_date">End Date</label>
<div class="birthdate-input-group"><input name="recurring_events[1].end_date" id="recurring_events[1].end_date" class="form-control" max="2026-03-07" min="1876-01-01" type="date" />
<div class="age-display" id="recurring_events[1].end_date_age" style="margin-top: 5px; font-size: 0.9em; color: #666;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const birthdateField = document.getElementById('recurring_events[1].end_date');
const ageDisplay = document.getElementById('recurring_events[1].end_date_age');
function calculateAge() {
if (birthdateField.value && ageDisplay) {
const birthDate = new Date(birthdateField.value);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
ageDisplay.textContent = age >= 0 ? `Age: ${age} years` : '';
}
}
if (birthdateField) {
birthdateField.addEventListener('change', calculateAge);
calculateAge(); // Calculate on load if value is set
}
});
</script>
</div>
<div class="form-text">When should recurrence stop? (optional)</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].location"><i class="bi bi-geo-alt"></i> Location</label>
<input name="recurring_events[1].location" id="recurring_events[1].location" class="form-control" value="Main Auditorium" placeholder="Conference Room A" type="text" />
<div class="form-text">Where will this event take place?</div></div>
</div>
<div class="col-lg-4 col-md-6">
<div class="mb-3"><label for="recurring_events[1].send_reminder"><i class="bi bi-bell"></i> Send Reminder</label>
<input name="recurring_events[1].send_reminder" id="recurring_events[1].send_reminder" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Send notification before event?</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="recurring_events">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Set up recurring events and reminders</div>
</div>
</div>
</div>
<div id="tab-5"
class="tab-panel"
role="tabpanel"
style="display: none;"
aria-hidden="true">
<div class="vertical-layout vertical-layout" style="display: flex; flex-direction: column; gap: 1rem; align-items: stretch"><div class="mb-3"><label for="username"><i class="bi bi-person-badge"></i> Username *</label>
<input name="username" id="username" class="form-control" value="jsmith" required="required" minlength="3" maxlength="50" placeholder="johndoe" type="text" />
<div class="form-text">Your unique username</div></div>
<div class="mb-3"><label for="display_name"><i class="bi bi-person"></i> Display Name *</label>
<input name="display_name" id="display_name" class="form-control" value="John Smith" required="required" maxlength="100" placeholder="John Doe" type="text" />
<div class="form-text">Name shown to other users</div></div>
<div class="mb-3"><div class="mb-3">
<label for="language" class="form-label">Language</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-translate"></i></span>
<select name="language" id="language" class="form-select"><option value="en" selected>πΊπΈ English</option>
<option value="es">πͺπΈ EspaΓ±ol</option>
<option value="fr">π«π· FranΓ§ais</option>
<option value="de">π©πͺ Deutsch</option>
<option value="ja">π―π΅ ζ₯ζ¬θͺ</option>
<option value="zh">π¨π³ δΈζ</option></select>
</div>
<div class="form-text">Preferred language</div>
</div></div>
<div class="mb-3"><div class="mb-3">
<label for="ui_theme" class="form-label">UI Theme</label>
<fieldset class="radio-group" class="form-select">
<legend>UI Theme</legend>
<div class="radio-item">
<label for="ui_theme_0">
<input name="ui_theme" id="ui_theme_0" type="radio" value="light" class="form-select" />
<span class="radio-label">βοΈ Light</span>
</label>
</div>
<div class="radio-item">
<label for="ui_theme_1">
<input name="ui_theme" id="ui_theme_1" type="radio" value="dark" class="form-select" />
<span class="radio-label">π Dark</span>
</label>
</div>
<div class="radio-item">
<label for="ui_theme_2">
<input name="ui_theme" id="ui_theme_2" type="radio" value="auto" class="form-select" />
<span class="radio-label">π Auto</span>
</label>
</div>
</fieldset>
<div class="form-text">Interface theme preference</div>
</div></div>
<div class="mb-3"><label for="font_size"><i class="bi bi-fonts"></i> Font Size (px)</label>
<input name="font_size" id="font_size" class="form-control" value="16" min="1" max="5" step="1" type="range" />
<div class="star-rating" id="font_size-stars">
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const range = document.getElementById('font_size');
const stars = document.getElementById('font_size-stars');
if (range && stars) {
range.addEventListener('input', function() {
const value = parseInt(this.value);
const maxRating = 5;
stars.textContent = 'β
'.repeat(value) + 'β'.repeat(maxRating - value);
});
}
});
</script>
<div class="form-text">Adjust text size</div></div>
<div class="mb-3"><label for="accessibility_mode"><i class="bi bi-universal-access"></i> Accessibility Mode</label>
<input name="accessibility_mode" id="accessibility_mode" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Enable high-contrast and screen reader support</div></div>
<div class="mb-3"><label for="compact_view"><i class="bi bi-layout-split"></i> Compact View</label>
<input name="compact_view" id="compact_view" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Use denser layout to show more content</div></div>
<div class="mb-3"><label for="show_tutorials"><i class="bi bi-question-circle"></i> Show Tutorial Tooltips</label>
<input name="show_tutorials" id="show_tutorials" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Display helpful tips for new features</div></div>
<div class="mb-3"><label for="auto_save"><i class="bi bi-floppy"></i> Auto-Save</label>
<input name="auto_save" id="auto_save" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Automatically save changes</div></div>
<div class="mb-3"><label for="auto_save_interval"><i class="bi bi-clock"></i> Auto-Save Interval (minutes)</label>
<input name="auto_save_interval" id="auto_save_interval" class="form-control" value="5" min="1" max="60" step="0.1" placeholder="50.0%" inputmode="numeric" type="number" />
<div class="form-text">How often to auto-save</div></div>
<div class="mb-3 model-list-block" data-field-name="notification_preferences" data-min-items="0" data-max-items="20">
<label class="form-label fw-bold">Notification Preferences</label>
<div class="model-list-container" data-field-name="notification_preferences" data-min-items="0" data-max-items="20">
<div class="model-list-items" id="notification_preferences-items"><template class="model-list-item-template">
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {event_category} via {notification_type}"
data-field-name="notification_preferences">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#notification_preferences_item_0_content"
aria-expanded="false"
aria-controls="notification_preferences_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
Item #1
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="notification_preferences"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="notification_preferences_item_0_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].notification_type" class="form-label">Notification Type</label>
<select name="notification_preferences[0].notification_type" id="notification_preferences[0].notification_type" class="form-select"><option value="email">π§ Email</option>
<option value="sms">π± SMS</option>
<option value="push">π Push Notification</option>
<option value="in_app">π¬ In-App</option></select>
<div class="form-text">Type of notification</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].event_category" class="form-label">Event Category</label>
<select name="notification_preferences[0].event_category" id="notification_preferences[0].event_category" class="form-select"><option value="security">π Security Alerts</option>
<option value="updates">π° Product Updates</option>
<option value="marketing">π£ Marketing</option>
<option value="reminders">β° Reminders</option>
<option value="social">π₯ Social Activity</option></select>
<div class="form-text">What triggers this notification?</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="notification_preferences[0].enabled"><i class="bi bi-bell"></i> Enabled</label>
<input name="notification_preferences[0].enabled" id="notification_preferences[0].enabled" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Receive these notifications?</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].frequency" class="form-label">Frequency</label>
<select name="notification_preferences[0].frequency" id="notification_preferences[0].frequency" class="form-select"><option value="realtime">β‘ Real-time</option>
<option value="hourly">π Hourly Digest</option>
<option value="daily">π
Daily Digest</option>
<option value="weekly">π Weekly Digest</option></select>
<div class="form-text">How often to receive notifications?</div>
</div></div>
</div></div>
</div>
</div>
</div></template>
<div class="model-list-item card border mb-3"
data-index="0"
data-title-template="π {event_category} via {notification_type}"
data-field-name="notification_preferences">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#notification_preferences_item_0_content"
aria-expanded="false"
aria-controls="notification_preferences_item_0_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π security via email
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="0"
data-field-name="notification_preferences"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="notification_preferences_item_0_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].notification_type" class="form-label">Notification Type</label>
<select name="notification_preferences[0].notification_type" id="notification_preferences[0].notification_type" class="form-select"><option value="email" selected>π§ Email</option>
<option value="sms">π± SMS</option>
<option value="push">π Push Notification</option>
<option value="in_app">π¬ In-App</option></select>
<div class="form-text">Type of notification</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].event_category" class="form-label">Event Category</label>
<select name="notification_preferences[0].event_category" id="notification_preferences[0].event_category" class="form-select"><option value="security" selected>π Security Alerts</option>
<option value="updates">π° Product Updates</option>
<option value="marketing">π£ Marketing</option>
<option value="reminders">β° Reminders</option>
<option value="social">π₯ Social Activity</option></select>
<div class="form-text">What triggers this notification?</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="notification_preferences[0].enabled"><i class="bi bi-bell"></i> Enabled</label>
<input name="notification_preferences[0].enabled" id="notification_preferences[0].enabled" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Receive these notifications?</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[0].frequency" class="form-label">Frequency</label>
<select name="notification_preferences[0].frequency" id="notification_preferences[0].frequency" class="form-select"><option value="realtime" selected>β‘ Real-time</option>
<option value="hourly">π Hourly Digest</option>
<option value="daily">π
Daily Digest</option>
<option value="weekly">π Weekly Digest</option></select>
<div class="form-text">How often to receive notifications?</div>
</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="1"
data-title-template="π {event_category} via {notification_type}"
data-field-name="notification_preferences">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#notification_preferences_item_1_content"
aria-expanded="false"
aria-controls="notification_preferences_item_1_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π updates via push
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="1"
data-field-name="notification_preferences"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="notification_preferences_item_1_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[1].notification_type" class="form-label">Notification Type</label>
<select name="notification_preferences[1].notification_type" id="notification_preferences[1].notification_type" class="form-select"><option value="email">π§ Email</option>
<option value="sms">π± SMS</option>
<option value="push" selected>π Push Notification</option>
<option value="in_app">π¬ In-App</option></select>
<div class="form-text">Type of notification</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[1].event_category" class="form-label">Event Category</label>
<select name="notification_preferences[1].event_category" id="notification_preferences[1].event_category" class="form-select"><option value="security">π Security Alerts</option>
<option value="updates" selected>π° Product Updates</option>
<option value="marketing">π£ Marketing</option>
<option value="reminders">β° Reminders</option>
<option value="social">π₯ Social Activity</option></select>
<div class="form-text">What triggers this notification?</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="notification_preferences[1].enabled"><i class="bi bi-bell"></i> Enabled</label>
<input name="notification_preferences[1].enabled" id="notification_preferences[1].enabled" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Receive these notifications?</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[1].frequency" class="form-label">Frequency</label>
<select name="notification_preferences[1].frequency" id="notification_preferences[1].frequency" class="form-select"><option value="realtime">β‘ Real-time</option>
<option value="hourly">π Hourly Digest</option>
<option value="daily" selected>π
Daily Digest</option>
<option value="weekly">π Weekly Digest</option></select>
<div class="form-text">How often to receive notifications?</div>
</div></div>
</div></div>
</div>
</div>
</div>
<div class="model-list-item card border mb-3"
data-index="2"
data-title-template="π {event_category} via {notification_type}"
data-field-name="notification_preferences">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<button class="btn btn-link text-decoration-none p-0 text-start"
type="button"
data-bs-toggle="collapse"
data-bs-target="#notification_preferences_item_2_content"
aria-expanded="false"
aria-controls="notification_preferences_item_2_content">
<i class="bi bi-chevron-right me-2"></i>
<i class="bi bi-card-list me-2"></i>
π marketing via email
</button>
</h6>
<button type="button"
class="btn btn-outline-danger btn-sm remove-item-btn"
data-index="2"
data-field-name="notification_preferences"
title="Remove this item">
<i class="bi bi-trash"></i>
</button>
</div>
<div class="collapse collapse show" id="notification_preferences_item_2_content">
<div class="card-body"><div class="row">
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[2].notification_type" class="form-label">Notification Type</label>
<select name="notification_preferences[2].notification_type" id="notification_preferences[2].notification_type" class="form-select"><option value="email" selected>π§ Email</option>
<option value="sms">π± SMS</option>
<option value="push">π Push Notification</option>
<option value="in_app">π¬ In-App</option></select>
<div class="form-text">Type of notification</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[2].event_category" class="form-label">Event Category</label>
<select name="notification_preferences[2].event_category" id="notification_preferences[2].event_category" class="form-select"><option value="security">π Security Alerts</option>
<option value="updates">π° Product Updates</option>
<option value="marketing" selected>π£ Marketing</option>
<option value="reminders">β° Reminders</option>
<option value="social">π₯ Social Activity</option></select>
<div class="form-text">What triggers this notification?</div>
</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><label for="notification_preferences[2].enabled"><i class="bi bi-bell"></i> Enabled</label>
<input name="notification_preferences[2].enabled" id="notification_preferences[2].enabled" class="form-check-input" value="1" type="checkbox" />
<div class="form-text">Receive these notifications?</div></div>
</div>
<div class="col-md-6">
<div class="mb-3"><div class="mb-3">
<label for="notification_preferences[2].frequency" class="form-label">Frequency</label>
<select name="notification_preferences[2].frequency" id="notification_preferences[2].frequency" class="form-select"><option value="realtime">β‘ Real-time</option>
<option value="hourly">π Hourly Digest</option>
<option value="daily">π
Daily Digest</option>
<option value="weekly" selected>π Weekly Digest</option></select>
<div class="form-text">How often to receive notifications?</div>
</div></div>
</div></div>
</div>
</div>
</div></div>
<div class="model-list-controls mt-2">
<button type="button" class="btn btn-outline-primary btn-sm add-item-btn" data-target="notification_preferences">
<i class="bi bi-plus-circle"></i> Add Item
</button>
</div>
</div>
<div class="form-text text-muted model-list-help">Customize notification settings</div>
</div>
<div class="mb-3"><label for="two_factor_enabled"><i class="bi bi-shield-check"></i> Two-Factor Authentication</label>
<input name="two_factor_enabled" id="two_factor_enabled" class="form-check-input" checked="checked" value="1" type="checkbox" />
<div class="form-text">Enable 2FA for enhanced security</div></div>
<div class="mb-3"><div class="mb-3">
<label for="session_timeout" class="form-label">Session Timeout (minutes)</label>
<div class="input-group">
<span class="input-group-text"><i class="bi bi-stopwatch"></i></span>
<select name="session_timeout" id="session_timeout" class="form-select"><option value="15">15 minutes</option>
<option value="30">30 minutes</option>
<option value="60" selected>1 hour</option>
<option value="120">2 hours</option>
<option value="480">8 hours</option>
<option value="1440">24 hours</option></select>
</div>
<div class="form-text">Auto-logout after inactivity</div>
</div></div></div>
</div>
</div>
</div>
<script>
function switchTab(tabId, buttonElement) {
const tabLayout = buttonElement.closest('.tab-layout');
const panels = tabLayout.querySelectorAll('.tab-panel');
const buttons = tabLayout.querySelectorAll('.tab-button');
panels.forEach(panel => {
panel.style.display = 'none';
panel.setAttribute('aria-hidden', 'true');
});
buttons.forEach(button => {
button.classList.remove('active');
button.setAttribute('aria-selected', 'false');
});
const selectedPanel = document.getElementById(tabId);
if (selectedPanel) {
selectedPanel.style.display = 'block';
selectedPanel.setAttribute('aria-hidden', 'false');
}
buttonElement.classList.add('active');
buttonElement.setAttribute('aria-selected', 'true');
}
</script>
<style>
.tab-layout .tab-navigation {
border-bottom: 2px solid #e0e0e0;
margin-bottom: 1rem;
}
.tab-layout .tab-button {
background: none;
border: none;
padding: 0.5rem 1rem;
cursor: pointer;
border-bottom: 2px solid transparent;
margin-right: 0.5rem;
}
.tab-layout .tab-button:hover {
background-color: #f5f5f5;
}
.tab-layout .tab-button.active {
border-bottom-color: #007bff;
color: #007bff;
}
.tab-layout .tab-panel {
display: none;
}
.tab-layout .tab-panel.active {
display: block;
}
</style>
</div>
</div>
</section>
<button type="submit" class="btn btn-primary">Submit</button>
<div style="margin-top: 0.5rem; font-size: 0.75rem; color: #6c757d; text-align: right;">Rendered in 0.047s</div>
</form>
<script>
(function() {
document.addEventListener('DOMContentLoaded', function() {
// Prevent Enter key from submitting forms unless on submit button
const forms = document.querySelectorAll('form.pydantic-form');
forms.forEach(function(form) {
form.addEventListener('keydown', function(e) {
// Check if Enter key is pressed
if (e.key === 'Enter' || e.keyCode === 13) {
const target = e.target;
// Allow Enter in textareas (for multi-line input)
if (target.tagName === 'TEXTAREA') {
return;
}
// Allow Enter on submit buttons
if (target.tagName === 'BUTTON' && target.type === 'submit') {
return;
}
// Allow Enter on input type="submit"
if (target.tagName === 'INPUT' && target.type === 'submit') {
return;
}
// Prevent form submission for all other cases
e.preventDefault();
return false;
}
});
});
});
})();
</script>
class ComprehensiveTabbedForm(FormModel):
"""
Wrapper form model containing the comprehensive tabbed layout.
This form demonstrates:
- 6 major tabs covering all form capabilities
- Tab 1: Organization - 5 levels of nesting
- Tab 2: Kitchen Sink - ALL input types
- Tab 3: Contact Management - Nested contacts
- Tab 4: Scheduling - Date/time management
- Tab 5: Media & Files - Color themes and media
- Tab 6: Settings - Preferences and notifications
"""
comprehensive_tabs: ComprehensiveTabbed = FormField(
default_factory=ComprehensiveTabbed,
title="Complete Feature Showcase",
input_type="layout",
help_text="Explore all 6 tabs to see every feature of Pydantic SchemaForms"
)
{
"description": "Wrapper form model containing the comprehensive tabbed layout.\n\nThis form demonstrates:\n- 6 major tabs covering all form capabilities\n- Tab 1: Organization - 5 levels of nesting\n- Tab 2: Kitchen Sink - ALL input types\n- Tab 3: Contact Management - Nested contacts\n- Tab 4: Scheduling - Date/time management\n- Tab 5: Media & Files - Color themes and media\n- Tab 6: Settings - Preferences and notifications",
"properties": {
"comprehensive_tabs": {
"autofocus": false,
"description": "Explore all 6 tabs to see every feature of Pydantic SchemaForms",
"disabled": false,
"help_text": "Explore all 6 tabs to see every feature of Pydantic SchemaForms",
"input_type": "layout",
"readonly": false,
"title": "Complete Feature Showcase"
}
},
"title": "ComprehensiveTabbedForm",
"type": "object"
}{
"comprehensive_tabs": {
"required": false
}
}{
"errors": {},
"data": {
"organization": {
"company_name": "TechCorp International",
"company_code": "TECH-2024",
"headquarters_address": "123 Innovation Drive, San Francisco, CA 94105",
"ceo_name": "Jane Smith",
"ceo_email": "jane.smith@techcorp.com",
"founded_date": "2010-01-15",
"employee_count": 5000,
"annual_revenue": 500000000.0,
"website": "https://www.techcorp.com",
"departments": [
{
"name": "Engineering",
"description": "Software development and infrastructure",
"department_head": "John Doe",
"head_email": "john.doe@techcorp.com",
"established_date": "2010-06-01",
"budget": 50000000.0,
"teams": [
{
"name": "Backend Services",
"description": "API and database services",
"team_lead": "Alice Johnson",
"formed_date": "2015-03-01",
"members": [
{
"name": "Bob Wilson",
"email": "bob.wilson@techcorp.com",
"role": "Senior Backend Developer",
"hire_date": "2016-01-15",
"experience_years": 12,
"manager": "Alice Johnson",
"certifications": [
{
"name": "AWS Solutions Architect Professional",
"issuer": "Amazon Web Services",
"issue_date": "2022-05-01",
"expiry_date": "2025-05-01",
"credential_id": "AWS-12345",
"credential_url": "https://aws.amazon.com/verification/12345"
},
{
"name": "Certified Kubernetes Administrator",
"issuer": "Cloud Native Computing Foundation",
"issue_date": "2023-01-15",
"expiry_date": "2026-01-15",
"credential_id": "CKA-67890",
"credential_url": "https://cncf.io/verify/67890"
}
]
}
]
}
],
"projects": [
{
"name": "Microservices Migration",
"description": "Migrate monolithic application to microservices architecture",
"status": "in_progress",
"start_date": "2024-01-01",
"target_end_date": "2024-12-31",
"budget": 2000000.0,
"project_manager": "Carol Lee",
"tasks": [
{
"title": "Refactor Auth Service",
"description": "Extract authentication into standalone microservice",
"priority": "high",
"status": "in_progress",
"start_date": "2024-02-01",
"due_date": "2024-03-31",
"assigned_to": "Bob Wilson",
"estimated_hours": 120.0,
"subtasks": [
{
"title": "Create service skeleton",
"description": "Set up FastAPI project structure",
"assigned_to": "Bob Wilson",
"estimated_hours": 16.0,
"status": "completed"
}
]
}
]
}
]
}
]
},
"kitchen_sink": {
"text_input": "Sample text value",
"email_input": "user@example.com",
"password_input": "SecurePass123!",
"search_input": "search query",
"url_input": "https://example.com",
"tel_input": "+1-555-987-6543",
"textarea_input": "This is a multi-line\ntext area\nwith sample content.",
"number_input": 42,
"decimal_input": 3.14159,
"range_input": 75,
"select_input": "option3",
"radio_input": "large",
"multiselect_input": [
"python",
"typescript",
"rust"
],
"checkbox_input": true,
"toggle_input": false,
"date_input": "2024-06-15",
"time_input": "14:30",
"datetime_input": "2024-06-15T14:30:00",
"color_input": "#e74c3c",
"hidden_input": "hidden_secret_value"
},
"contacts": {
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"company": "Acme Corporation",
"job_title": "Senior Software Engineer",
"birth_date": "1985-04-12",
"phone_numbers": [
{
"phone_type": "mobile",
"number": "+1 (555) 123-4567",
"is_primary": true
},
{
"phone_type": "work",
"number": "+1 (555) 987-6543",
"is_primary": false
}
],
"addresses": [
{
"address_type": "home",
"street_line1": "123 Main Street",
"street_line2": "Apt 4B",
"city": "San Francisco",
"state": "CA",
"postal_code": "94105",
"country": "US"
},
{
"address_type": "work",
"street_line1": "456 Corporate Blvd",
"street_line2": "Suite 200",
"city": "Palo Alto",
"state": "CA",
"postal_code": "94301",
"country": "US"
}
],
"notes": "Prefers email communication. Available Monday-Friday 9am-5pm PST."
},
"scheduling": {
"calendar_name": "Work Calendar",
"timezone": "America/Los_Angeles",
"default_event_duration": 60,
"work_start_time": "09:00",
"work_end_time": "17:00",
"weekend_days": [
"saturday",
"sunday"
],
"recurring_events": [
{
"event_name": "Weekly Team Standup",
"event_type": "meeting",
"start_date": "2024-01-08",
"start_time": "10:00",
"duration_minutes": 30,
"recurrence_pattern": "weekly",
"end_date": "2024-12-31",
"location": "Conference Room A",
"send_reminder": true
},
{
"event_name": "Monthly All Hands",
"event_type": "meeting",
"start_date": "2024-01-15",
"start_time": "14:00",
"duration_minutes": 90,
"recurrence_pattern": "monthly",
"end_date": null,
"location": "Main Auditorium",
"send_reminder": true
}
]
},
"media": {
"profile_picture_url": "https://example.com/avatars/user123.jpg",
"background_image_url": "https://example.com/backgrounds/abstract.jpg",
"favicon_color": "#3498db",
"enable_animations": true,
"enable_sound": false,
"video_quality": "1080p",
"autoplay_videos": false,
"color_themes": [
{
"theme_name": "Ocean Blue",
"primary_color": "#3498db",
"secondary_color": "#2ecc71",
"accent_color": "#e74c3c",
"background_color": "#ffffff",
"text_color": "#2c3e50",
"is_default": true
},
{
"theme_name": "Dark Mode",
"primary_color": "#1a1a1a",
"secondary_color": "#34495e",
"accent_color": "#f39c12",
"background_color": "#0a0a0a",
"text_color": "#ecf0f1",
"is_default": false
}
],
"max_upload_size_mb": 25
},
"settings": {
"username": "jsmith",
"display_name": "John Smith",
"language": "en",
"ui_theme": "auto",
"font_size": 16,
"accessibility_mode": false,
"compact_view": false,
"show_tutorials": true,
"auto_save": true,
"auto_save_interval": 5,
"notification_preferences": [
{
"notification_type": "email",
"event_category": "security",
"enabled": true,
"frequency": "realtime"
},
{
"notification_type": "push",
"event_category": "updates",
"enabled": true,
"frequency": "daily"
},
{
"notification_type": "email",
"event_category": "marketing",
"enabled": false,
"frequency": "weekly"
}
],
"two_factor_enabled": true,
"session_timeout": 60
},
"comprehensive_tabs": "<examples.nested_forms_example.ComprehensiveTabbed object at 0x7b87d8449a90>"
}
}