From e430051fff90a8b89d94166cb8fc5b22eb556b8d Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Wed, 1 Apr 2026 10:06:29 +0200 Subject: [PATCH] Add Element.ariaAtomic and Element.ariaLive properties ARIAMixin attribute reflection on Element, per the ARIA spec. --- src/browser/webapi/Element.zig | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/browser/webapi/Element.zig b/src/browser/webapi/Element.zig index 67c1e319..bc98f141 100644 --- a/src/browser/webapi/Element.zig +++ b/src/browser/webapi/Element.zig @@ -523,6 +523,31 @@ pub fn setDir(self: *Element, value: []const u8, page: *Page) !void { return self.setAttributeSafe(comptime .wrap("dir"), .wrap(value), page); } +// ARIAMixin - ARIA attribute reflection +pub fn getAriaAtomic(self: *const Element) ?[]const u8 { + return self.getAttributeSafe(comptime .wrap("aria-atomic")); +} + +pub fn setAriaAtomic(self: *Element, value: ?[]const u8, page: *Page) !void { + if (value) |v| { + try self.setAttributeSafe(comptime .wrap("aria-atomic"), .wrap(v), page); + } else { + try self.removeAttribute(comptime .wrap("aria-atomic"), page); + } +} + +pub fn getAriaLive(self: *const Element) ?[]const u8 { + return self.getAttributeSafe(comptime .wrap("aria-live")); +} + +pub fn setAriaLive(self: *Element, value: ?[]const u8, page: *Page) !void { + if (value) |v| { + try self.setAttributeSafe(comptime .wrap("aria-live"), .wrap(v), page); + } else { + try self.removeAttribute(comptime .wrap("aria-live"), page); + } +} + pub fn getClassName(self: *const Element) []const u8 { return self.getAttributeSafe(comptime .wrap("class")) orelse ""; } @@ -1686,6 +1711,8 @@ pub const JsApi = struct { pub const localName = bridge.accessor(Element.getLocalName, null, .{}); pub const id = bridge.accessor(Element.getId, Element.setId, .{}); pub const slot = bridge.accessor(Element.getSlot, Element.setSlot, .{}); + pub const ariaAtomic = bridge.accessor(Element.getAriaAtomic, Element.setAriaAtomic, .{}); + pub const ariaLive = bridge.accessor(Element.getAriaLive, Element.setAriaLive, .{}); pub const dir = bridge.accessor(Element.getDir, Element.setDir, .{}); pub const className = bridge.accessor(Element.getClassName, Element.setClassName, .{}); pub const classList = bridge.accessor(Element.getClassList, Element.setClassList, .{});