devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
118 lines (116 loc) • 4.62 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/radio_group/radio_collection.js)
* Version: 26.1.3
* Build date: Wed Jun 10 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _guid = _interopRequireDefault(require("../../../core/guid"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _common = require("../../../core/utils/common");
var _ui = _interopRequireDefault(require("../../../ui/editor/ui.data_expression"));
var _collection_widget = _interopRequireDefault(require("../../ui/collection/collection_widget.edit"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked";
const RADIO_BUTTON_ICON_CHECKED_CLASS = "dx-radiobutton-icon-checked";
const RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon";
const RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot";
const RADIO_VALUE_CONTAINER_CLASS = "dx-radio-value-container";
const RADIO_BUTTON_CLASS = "dx-radiobutton";
const ITEM_CONTENT_CLASS = "dx-item-content";
class RadioCollection extends _collection_widget.default {
_focusTarget() {
return (0, _renderer.default)(this.element()).parent()
}
_nullValueSelectionSupported() {
return true
}
_getDefaultOptions() {
return Object.assign({}, super._getDefaultOptions(), _ui.default._dataExpressionDefaultOptions())
}
_initMarkup() {
super._initMarkup();
(0, _common.deferRender)(() => {
this._itemElements().addClass("dx-radiobutton")
})
}
_keyboardEventBindingTarget() {
return this._focusTarget()
}
_getItemIdTarget($target) {
const $radioContainer = $target.find(".dx-radio-value-container");
if ($radioContainer.length) {
return $radioContainer
}
return $target
}
_postprocessRenderItem(args) {
const {
itemData: itemData,
itemElement: itemElement
} = args;
const {
html: html
} = itemData;
const $itemElement = (0, _renderer.default)(itemElement);
if (!html) {
const $radio = (0, _renderer.default)("<div>").addClass("dx-radiobutton-icon");
(0, _renderer.default)("<div>").addClass("dx-radiobutton-icon-dot").appendTo($radio);
const $radioContainer = (0, _renderer.default)("<div>").append($radio).addClass("dx-radio-value-container");
$itemElement.prepend($radioContainer)
}
super._postprocessRenderItem(args);
const aria = {
role: "radio"
};
if (!html) {
const $itemContent = $itemElement.find(".dx-item-content");
const contentId = $itemContent.attr("id") || `dx-${new _guid.default}`;
$itemContent.attr("id", contentId);
aria.labelledby = contentId
}
const $ariaTarget = this._getItemIdTarget($itemElement);
this.setAria(aria, $ariaTarget)
}
_processSelectableItem($itemElement, isSelected) {
super._processSelectableItem($itemElement, isSelected);
$itemElement.toggleClass("dx-radiobutton-checked", isSelected).find(".dx-radiobutton-icon").first().toggleClass("dx-radiobutton-icon-checked", isSelected);
const $radioContainer = $itemElement.find(".dx-radio-value-container");
const $ariaCheckedTarget = $radioContainer.length ? $radioContainer : $itemElement;
this.setAria("checked", isSelected, $ariaCheckedTarget)
}
_refreshContent() {
this._prepareContent();
this._renderContent()
}
_supportedKeys() {
const parent = super._supportedKeys();
return Object.assign({}, parent, {
enter(e) {
var _parent$enter;
e.preventDefault();
null === (_parent$enter = parent.enter) || void 0 === _parent$enter || _parent$enter.apply(this, [e])
},
space(e) {
var _parent$space;
e.preventDefault();
null === (_parent$space = parent.space) || void 0 === _parent$space || _parent$space.apply(this, [e])
}
})
}
_itemElements() {
return this._itemContainer().children(this._itemSelector())
}
_setAriaSelectionAttribute() {}
}
var _default = exports.default = RadioCollection;