',
$fieldHelpers->getCustomAttributes('add-to-end-btn-wrp'),
$fieldHelpers->getAtomicCls('add-to-end-btn-wrp'),
$fieldHelpers->getCustomClasses('add-to-end-btn-wrp'),
$fieldHelpers->getCustomAttributes('add-to-end-btn'),
$fieldHelpers->getAtomicCls('add-to-end-btn'),
$fieldHelpers->getCustomClasses('add-to-end-btn'),
$field->addToEndBtn->btnTyp,
$field->fieldName,
$addToEndBtnPreIcn,
$fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addToEndBtn->txt)),
$addToEndBtnSufIcn
);
};
$removeBtnPreIcn = $fieldHelpers->icon('removeBtnPreIcn', 'rpt-rmv-btn-pre-i');
$removeBtnSufIcn = $fieldHelpers->icon('removeBtnSufIcn', 'rpt-rmv-btn-suf-i');
$themeBase = new ThemeBase();
$fieldHtml = '';
if (isset($nestedLayout->lg)) {
foreach ($nestedLayout->lg as $row) {
$fieldHtml .= $themeBase->inputWrapper($formViewerInstance, $row->i);
}
}
// role="region" marks each repeater row as a landmark region
// aria-label provides context about which row number this is (dynamically updated by JS)
// This helps screen reader users navigate between repeater rows
$repeatableWrap = sprintf(
'
%8$s
%12$s
',
$fieldHelpers->getCustomAttributes('rpt-wrp'),
$fieldHelpers->getAtomicCls('rpt-wrp'),
$fieldHelpers->getCustomClasses('rpt-wrp'),
$fieldHelpers->getCustomAttributes('rpt-grid-wrp'),
$fieldHelpers->getAtomicCls('rpt-grid-wrp'),
$fieldHelpers->getCustomClasses('rpt-grid-wrp'),
$formID,
$fieldHtml,
$fieldHelpers->getCustomAttributes('pair-btn-wrp'),
$fieldHelpers->getAtomicCls('pair-btn-wrp'),
$fieldHelpers->getCustomClasses('pair-btn-wrp'),
$addBtnMarkup,
$fieldHelpers->getCustomAttributes('rpt-rmv-btn'),
$fieldHelpers->getAtomicCls('rpt-rmv-btn'),
$fieldHelpers->getCustomClasses('rpt-rmv-btn'),
$field->removeBtn->btnTyp,
$field->fieldName,
$removeBtnPreIcn,
$fieldHelpers->renderHTMR($field->removeBtn->txt),
$removeBtnSufIcn
);
$repeatedRow = apply_filters('bitform_repeater_repeated_rows', $repeatableWrap, $field);
// role="group" indicates this is a collection of related form controls
// aria-labelledby links to the field label for screen reader context
// This helps users understand the repeater structure
return sprintf(
'