LLS refactor

This commit is contained in:
Insality 2025-03-07 21:09:01 +02:00
parent 3bb8705444
commit be03a5bd50
18 changed files with 244 additions and 169 deletions

View File

@ -4,6 +4,8 @@
Button component is a basic component that can be used to create a clickable button. It provides various interaction callbacks such as click, long click, double click, and more. The component makes any GUI node clickable and allows you to define different behaviors for various user interactions. Button component is a basic component that can be used to create a clickable button. It provides various interaction callbacks such as click, long click, double click, and more. The component makes any GUI node clickable and allows you to define different behaviors for various user interactions.
Button component is not support multitouch. In case of multitouch required (ex. on screen control) the custom component should be written with own input handling.
## Features ## Features
- Regular click handling - Regular click handling

View File

@ -38,8 +38,6 @@ local helper = require("druid.helper")
---@field private _meta druid.component.meta ---@field private _meta druid.component.meta
local M = {} local M = {}
local INTERESTS = {} -- Cache interests per component class in runtime
local uid = 0 local uid = 0
---@private ---@private
@ -234,6 +232,13 @@ function M:set_input_enabled(state)
end end
---Get component input state. By default it's enabled. Can be disabled by `set_input_enabled` function.
---@return boolean
function M:get_input_enabled()
return self._meta.input_enabled
end
---Get parent component ---Get parent component
---@return druid.component|nil parent_component The parent component if exist or nil ---@return druid.component|nil parent_component The parent component if exist or nil
function M:get_parent_component() function M:get_parent_component()
@ -286,28 +291,6 @@ function M:_reset_input_priority_changed()
end end
---Get current component interests
---@return table List of component interests
---@private
function M:__get_interests()
local instance_class = self._meta.instance_class
if INTERESTS[instance_class] then
return INTERESTS[instance_class]
end
local interests = {}
for index = 1, #const.ALL_INTERESTS do
local interest = const.ALL_INTERESTS[index]
if self[interest] and type(self[interest]) == "function" then
table.insert(interests, interest)
end
end
INTERESTS[instance_class] = interests
return INTERESTS[instance_class]
end
---Get current component nodes ---Get current component nodes
---@return table<hash, node>|nil ---@return table<hash, node>|nil
function M:get_nodes() function M:get_nodes()
@ -333,7 +316,6 @@ function M:__add_child(child)
end end
---Remove child from component children list ---Remove child from component children list
---@generic T: druid.component ---@generic T: druid.component
---@param child T The druid component instance ---@param child T The druid component instance
@ -394,4 +376,45 @@ function M.create(name, input_priority)
end end
local WIDGET_METATABLE = { __index = M }
---Create the Druid component instance
---@param self druid.instance
---@param widget_class druid.widget
---@param context table
---@return druid.widget
function M.create_widget(self, widget_class, context)
local instance = setmetatable({}, {
__index = setmetatable(widget_class, WIDGET_METATABLE)
})
instance._component = {
_uid = M.create_uid(),
name = "Druid Widget",
input_priority = const.PRIORITY_INPUT,
default_input_priority = const.PRIORITY_INPUT,
_is_input_priority_changed = true, -- Default true for sort once time after GUI init
}
instance._meta = {
druid = self,
template = "",
nodes = nil,
context = context,
style = nil,
input_enabled = true,
children = {},
parent = type(context) ~= "userdata" and context or nil,
instance_class = widget_class
}
-- Register
if instance._meta.parent then
instance._meta.parent:__add_child(instance)
end
---@cast instance druid.widget
return instance
end
return M return M

View File

@ -44,7 +44,7 @@ local CORNER_PIVOTS = {
---@field fit_size vector3 ---@field fit_size vector3
---@field min_size_x number|nil ---@field min_size_x number|nil
---@field min_size_y number|nil ---@field min_size_y number|nil
---@field on_size_changed event @function on_size_changed(size) ---@field on_size_changed event fun(self: druid.container, size: vector3)
---@field _parent_container druid.container ---@field _parent_container druid.container
---@field _containers table ---@field _containers table
---@field _draggable_corners table ---@field _draggable_corners table
@ -244,7 +244,7 @@ function M:add_container(node_or_container, mode, on_resize_callback)
local node = node_or_container local node = node_or_container
-- Check it's a container components instead of node -- Check it's a container components instead of node
if type(node_or_container) == "table" and node_or_container._component then if type(node_or_container) == "table" and node_or_container.add_container then
node = node_or_container.node node = node_or_container.node
container = node_or_container container = node_or_container
mode = mode or container.mode mode = mode or container.mode

View File

@ -148,8 +148,6 @@ function M:set_max_size(max_size)
end end
---@private ---@private
function M:_check_steps(from, to, exactly) function M:_check_steps(from, to, exactly)
if not self.steps then if not self.steps then

View File

@ -298,7 +298,7 @@ end
---@param node node ---@param node node
---@param x number ---@param x number
---@param y number ---@param y number
---@param node_click_area node|nil ---@param node_click_area node|nil Additional node to check for click area. If nil, only node will be checked
---@local ---@local
function M.pick_node(node, x, y, node_click_area) function M.pick_node(node, x, y, node_click_area)
local is_pick = gui_pick_node(node, x, y) local is_pick = gui_pick_node(node, x, y)

View File

@ -1,6 +1,5 @@
---@class druid.widget: druid.component ---@class druid.widget: druid.component
---@field druid druid.instance Ready to use druid instance ---@field druid druid.instance Ready to use druid instance
---@field root node Is it really needed?
---@class GUITextMetrics ---@class GUITextMetrics
---@field width number ---@field width number

View File

@ -1,18 +1,16 @@
-- Hello! Wish you a good day! -- Hello, Defolder! Wish you a good day!
local events = require("event.events") local events = require("event.events")
local const = require("druid.const") local const = require("druid.const")
local helper = require("druid.helper") local helper = require("druid.helper")
local settings = require("druid.system.settings") local settings = require("druid.system.settings")
local base_component = require("druid.component") local druid_component = require("druid.component")
---@class druid.instance ---@class druid.instance
---@field components_all druid.component[] All created components ---@field components_all druid.component[] All created components
---@field components_interest table<string, druid.component[]> All components sorted by interest ---@field components_interest table<string, druid.component[]> All components sorted by interest
---@field url url ---@field private _context table Druid context, usually a self of gui script
---@field private _context table Druid context
---@field private _style table Druid style table ---@field private _style table Druid style table
---@field private _deleted boolean
---@field private _is_late_remove_enabled boolean ---@field private _is_late_remove_enabled boolean
---@field private _late_remove druid.component[] ---@field private _late_remove druid.component[]
---@field private _input_blacklist druid.component[]|nil ---@field private _input_blacklist druid.component[]|nil
@ -25,6 +23,7 @@ local M = {}
local MSG_ADD_FOCUS = hash("acquire_input_focus") local MSG_ADD_FOCUS = hash("acquire_input_focus")
local MSG_REMOVE_FOCUS = hash("release_input_focus") local MSG_REMOVE_FOCUS = hash("release_input_focus")
local IS_NO_AUTO_INPUT = sys.get_config_int("druid.no_auto_input", 0) == 1 local IS_NO_AUTO_INPUT = sys.get_config_int("druid.no_auto_input", 0) == 1
local INTERESTS_CACHE = {} -- Cache interests per component class in runtime
local function set_input_state(self, is_input_inited) local function set_input_state(self, is_input_inited)
if IS_NO_AUTO_INPUT or (self.input_inited == is_input_inited) then if IS_NO_AUTO_INPUT or (self.input_inited == is_input_inited) then
@ -36,17 +35,19 @@ local function set_input_state(self, is_input_inited)
end end
-- The a and b - two Druid components
---@private ---@private
local function sort_input_comparator(a, b) ---@param component_a druid.component
local a_priority = a:get_input_priority() ---@param component_b druid.component
local b_priority = b:get_input_priority() ---@return boolean
local function sort_input_comparator(component_a, component_b)
local a_priority = component_a:get_input_priority()
local b_priority = component_b:get_input_priority()
if a_priority ~= b_priority then if a_priority ~= b_priority then
return a_priority < b_priority return a_priority < b_priority
end end
return a:get_uid() < b:get_uid() return component_a:get_uid() < component_b:get_uid()
end end
@ -60,64 +61,62 @@ local function sort_input_stack(self)
end end
-- Create the Druid component instance ---Get current component interests
local function create(self, instance_class) ---@param instance druid.component
local instance = instance_class() ---@return table interest_list List of component interests
instance:setup_component(self, self._context, self._style, instance_class) local function get_component_interests(instance)
---@diagnostic disable-next-line: invisible
local instance_class = instance._meta.instance_class
if INTERESTS_CACHE[instance_class] then
return INTERESTS_CACHE[instance_class]
end
local interests = {}
for index = 1, #const.ALL_INTERESTS do
local interest = const.ALL_INTERESTS[index]
if instance[interest] and type(instance[interest]) == "function" then
table.insert(interests, interest)
end
end
INTERESTS_CACHE[instance_class] = interests
return INTERESTS_CACHE[instance_class]
end
---@private
---@param self druid.instance
---@param instance druid.component
local function register_interests(self, instance)
table.insert(self.components_all, instance) table.insert(self.components_all, instance)
local interest_list = get_component_interests(instance)
local register_to = instance:__get_interests() for i = 1, #interest_list do
for i = 1, #register_to do local interest = interest_list[i]
local interest = register_to[i]
table.insert(self.components_interest[interest], instance) table.insert(self.components_interest[interest], instance)
end end
end
-- Create the Druid component instance
---@param self druid.instance
---@param instance_class druid.component
---@return druid.component
local function create(self, instance_class)
local instance = instance_class()
instance:setup_component(self, self:get_context(), self:get_style(), instance_class)
register_interests(self, instance)
return instance return instance
end end
local WIDGET_METATABLE = { __index = base_component } ---@private
---Create the Druid component instance
---@param self druid.instance ---@param self druid.instance
---@param widget_class druid.component ---@param widget_class druid.widget
---@return druid.widget
local function create_widget(self, widget_class) local function create_widget(self, widget_class)
local instance = setmetatable({}, { local instance = druid_component.create_widget(self, widget_class, self:get_context())
__index = setmetatable(widget_class, WIDGET_METATABLE) register_interests(self, instance)
})
instance._component = {
_uid = base_component.create_uid(),
name = "Druid Widget",
input_priority = const.PRIORITY_INPUT,
default_input_priority = const.PRIORITY_INPUT,
_is_input_priority_changed = true, -- Default true for sort once time after GUI init
}
instance._meta = {
druid = self,
template = "",
nodes = nil,
context = self._context,
style = nil,
input_enabled = true,
children = {},
parent = type(self._context) ~= "userdata" and self._context,
instance_class = widget_class
}
-- Register
if instance._meta.parent then
instance._meta.parent:__add_child(instance)
end
table.insert(self.components_all, instance)
local register_to = instance:__get_interests()
for i = 1, #register_to do
local interest = register_to[i]
table.insert(self.components_interest[interest], instance)
end
return instance return instance
end end
@ -176,8 +175,9 @@ function M:_process_input(action_id, action, components)
for i = #components, 1, -1 do for i = #components, 1, -1 do
local component = components[i] local component = components[i]
local meta = component._meta local input_enabled = component:get_input_enabled()
if meta.input_enabled and self:_can_use_input_component(component) then
if input_enabled and self:_can_use_input_component(component) then
if not is_input_consumed then if not is_input_consumed then
is_input_consumed = component:on_input(action_id, action) or false is_input_consumed = component:on_input(action_id, action) or false
else else
@ -210,7 +210,6 @@ end
function M:initialize(context, style) function M:initialize(context, style)
self._context = context self._context = context
self._style = style or settings.default_style self._style = style or settings.default_style
self._deleted = false
self._is_late_remove_enabled = false self._is_late_remove_enabled = false
self._late_remove = {} self._late_remove = {}
@ -257,8 +256,6 @@ function M:final()
end end
end end
self._deleted = true
set_input_state(self, false) set_input_state(self, false)
events.unsubscribe("druid.window_event", self.on_window_event, self) events.unsubscribe("druid.window_event", self.on_window_event, self)
@ -303,9 +300,9 @@ function M:remove(component)
end end
end end
local interests = component:__get_interests() local interest_list = get_component_interests(component)
for i = 1, #interests do for i = 1, #interest_list do
local interest = interests[i] local interest = interest_list[i]
local components = self.components_interest[interest] local components = self.components_interest[interest]
for j = #components, 1, -1 do for j = #components, 1, -1 do
if components[j] == component then if components[j] == component then
@ -318,6 +315,22 @@ function M:remove(component)
end end
---Get a context of Druid instance (usually a self of gui script)
---@package
---@return any
function M:get_context()
return self._context
end
---Get a style of Druid instance
---@package
---@return table
function M:get_style()
return self._style
end
---Druid late update function called after initialization and before the regular update step. ---Druid late update function called after initialization and before the regular update step.
---This function is used to check the GUI state and perform actions after all components and nodes have been created. ---This function is used to check the GUI state and perform actions after all components and nodes have been created.
---An example use case is performing an auto stencil check in the GUI hierarchy for input components. ---An example use case is performing an auto stencil check in the GUI hierarchy for input components.
@ -506,7 +519,7 @@ end
local button = require("druid.base.button") local button = require("druid.base.button")
---Create Button component ---Create Button component
---@param node string|node The node_id or gui.get_node(node_id) ---@param node string|node The node_id or gui.get_node(node_id)
---@param callback function|nil Button callback ---@param callback function|event|nil Button callback
---@param params any|nil Button callback params ---@param params any|nil Button callback params
---@param anim_node node|string|nil Button anim node (node, if not provided) ---@param anim_node node|string|nil Button anim node (node, if not provided)
---@return druid.button Button component ---@return druid.button Button component

View File

@ -102,13 +102,16 @@ end
function M:clear_created_properties() function M:clear_created_properties()
for index = 1, #self.properties do for index = 1, #self.properties do
local property = self.properties[index] local property = self.properties[index]
local root = property.root --[[@as node]]
if root then
-- If prefab used clone nodes we can remove it -- If prefab used clone nodes we can remove it
if property:get_nodes() then if property:get_nodes() then
gui.delete_node(property.root) gui.delete_node(root)
else else
-- Probably we have component placed on scene directly -- Probably we have component placed on scene directly
gui.set_enabled(property.root, false) gui.set_enabled(root, false)
end
end end
self.druid:remove(self.properties[index]) self.druid:remove(self.properties[index])

View File

@ -13,7 +13,7 @@ function M.get_examples()
code_url = "example/examples/basic/button/basic_button.lua", code_url = "example/examples/basic/button/basic_button.lua",
component_class = require("example.examples.basic.button.basic_button"), component_class = require("example.examples.basic.button.basic_button"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance basic_button ---@cast instance examples.basic_button
local checkbox = properties_panel:add_checkbox("ui_enabled", false, function(value) local checkbox = properties_panel:add_checkbox("ui_enabled", false, function(value)
instance.button:set_enabled(value) instance.button:set_enabled(value)
@ -21,7 +21,7 @@ function M.get_examples()
checkbox:set_value(true) checkbox:set_value(true)
end, end,
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_button ---@cast instance examples.basic_button
instance.button.on_click:subscribe(function() instance.button.on_click:subscribe(function()
output_log:add_log_text("Button Clicked") output_log:add_log_text("Button Clicked")
end) end)
@ -35,7 +35,7 @@ function M.get_examples()
code_url = "example/examples/basic/button/basic_button_double_click.lua", code_url = "example/examples/basic/button/basic_button_double_click.lua",
component_class = require("example.examples.basic.button.basic_button_double_click"), component_class = require("example.examples.basic.button.basic_button_double_click"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_button_double_click ---@cast instance examples.basic_button_double_click
instance.button.on_click:subscribe(function() instance.button.on_click:subscribe(function()
output_log:add_log_text("Clicked") output_log:add_log_text("Clicked")
end) end)
@ -52,7 +52,7 @@ function M.get_examples()
code_url = "example/examples/basic/button/basic_button_hold.lua", code_url = "example/examples/basic/button/basic_button_hold.lua",
component_class = require("example.examples.basic.button.basic_button_hold"), component_class = require("example.examples.basic.button.basic_button_hold"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_button_hold ---@cast instance examples.basic_button_hold
instance.button.on_click:subscribe(function() instance.button.on_click:subscribe(function()
output_log:add_log_text("Clicked") output_log:add_log_text("Clicked")
end) end)
@ -69,7 +69,7 @@ function M.get_examples()
code_url = "example/examples/basic/text/basic_text.lua", code_url = "example/examples/basic/text/basic_text.lua",
component_class = require("example.examples.basic.text.basic_text"), component_class = require("example.examples.basic.text.basic_text"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance basic_text ---@cast instance examples.basic_text
local adjust_index = 1 local adjust_index = 1
local adjust_types = { local adjust_types = {
@ -100,7 +100,7 @@ function M.get_examples()
gui.PIVOT_NW, gui.PIVOT_NW,
} }
---@cast instance rich_text_tags ---@cast instance examples.rich_text_tags
properties_panel:add_button("ui_pivot_next", function() properties_panel:add_button("ui_pivot_next", function()
pivot_index = pivot_index + 1 pivot_index = pivot_index + 1
if pivot_index > #pivot_list then if pivot_index > #pivot_list then
@ -110,7 +110,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance multiline_text ---@cast instance examples.multiline_text
local info = "" local info = ""
info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n" info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n"
@ -127,7 +127,7 @@ function M.get_examples()
code_url = "example/examples/basic/text/multiline_text.lua", code_url = "example/examples/basic/text/multiline_text.lua",
component_class = require("example.examples.basic.text.multiline_text"), component_class = require("example.examples.basic.text.multiline_text"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance multiline_text ---@cast instance examples.multiline_text
local adjust_index = 1 local adjust_index = 1
local adjust_types = { local adjust_types = {
@ -167,7 +167,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance multiline_text ---@cast instance examples.multiline_text
local info = "" local info = ""
info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n" info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n"
@ -208,7 +208,7 @@ function M.get_examples()
code_url = "example/examples/basic/slider/basic_slider.lua", code_url = "example/examples/basic/slider/basic_slider.lua",
component_class = require("example.examples.basic.slider.basic_slider"), component_class = require("example.examples.basic.slider.basic_slider"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_slider ---@cast instance examples.basic_slider
instance.slider.on_change_value:subscribe(function(_, value) instance.slider.on_change_value:subscribe(function(_, value)
local value = helper.round(value, 2) local value = helper.round(value, 2)
output_log:add_log_text("Slider Value: " .. value) output_log:add_log_text("Slider Value: " .. value)
@ -223,7 +223,7 @@ function M.get_examples()
code_url = "example/examples/basic/slider/basic_slider_vertical.lua", code_url = "example/examples/basic/slider/basic_slider_vertical.lua",
component_class = require("example.examples.basic.slider.basic_slider_vertical"), component_class = require("example.examples.basic.slider.basic_slider_vertical"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_slider_vertical ---@cast instance examples.basic_slider_vertical
instance.slider.on_change_value:subscribe(function(_, value) instance.slider.on_change_value:subscribe(function(_, value)
local value = helper.round(value, 2) local value = helper.round(value, 2)
output_log:add_log_text("Slider Value: " .. value) output_log:add_log_text("Slider Value: " .. value)
@ -238,7 +238,7 @@ function M.get_examples()
code_url = "example/examples/basic/slider/basic_slider_stepped.lua", code_url = "example/examples/basic/slider/basic_slider_stepped.lua",
component_class = require("example.examples.basic.slider.basic_slider_stepped"), component_class = require("example.examples.basic.slider.basic_slider_stepped"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_slider ---@cast instance examples.basic_slider_stepped
instance.slider.on_change_value:subscribe(function(_, value) instance.slider.on_change_value:subscribe(function(_, value)
local value = helper.round(value, 2) local value = helper.round(value, 2)
output_log:add_log_text("Slider Value: " .. value) output_log:add_log_text("Slider Value: " .. value)
@ -253,7 +253,7 @@ function M.get_examples()
code_url = "example/examples/basic/progress_bar/basic_progress_bar.lua", code_url = "example/examples/basic/progress_bar/basic_progress_bar.lua",
component_class = require("example.examples.basic.progress_bar.basic_progress_bar"), component_class = require("example.examples.basic.progress_bar.basic_progress_bar"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance basic_progress_bar ---@cast instance examples.basic_progress_bar
properties_panel:add_slider("ui_value", 1, function(value) properties_panel:add_slider("ui_value", 1, function(value)
instance:set_value(value) instance:set_value(value)
end) end)
@ -267,7 +267,7 @@ function M.get_examples()
code_url = "example/examples/basic/progress_bar/basic_progress_bar_slice9.lua", code_url = "example/examples/basic/progress_bar/basic_progress_bar_slice9.lua",
component_class = require("example.examples.basic.progress_bar.basic_progress_bar_slice9"), component_class = require("example.examples.basic.progress_bar.basic_progress_bar_slice9"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance basic_progress_bar_slice9 ---@cast instance examples.basic_progress_bar_slice9
properties_panel:add_slider("ui_value", 1, function(value) properties_panel:add_slider("ui_value", 1, function(value)
instance:set_value(value) instance:set_value(value)
end) end)
@ -281,7 +281,7 @@ function M.get_examples()
code_url = "example/examples/basic/blocker/basic_blocker.lua", code_url = "example/examples/basic/blocker/basic_blocker.lua",
component_class = require("example.examples.basic.blocker.basic_blocker"), component_class = require("example.examples.basic.blocker.basic_blocker"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_blocker ---@cast instance examples.basic_blocker
instance.button_root.on_click:subscribe(function() instance.button_root.on_click:subscribe(function()
output_log:add_log_text("Root Clicked") output_log:add_log_text("Root Clicked")
end) end)
@ -306,7 +306,7 @@ function M.get_examples()
code_url = "example/examples/basic/timer/basic_timer.lua", code_url = "example/examples/basic/timer/basic_timer.lua",
component_class = require("example.examples.basic.timer.basic_timer"), component_class = require("example.examples.basic.timer.basic_timer"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_timer ---@cast instance examples.basic_timer
instance.on_cycle_end:subscribe(function() instance.on_cycle_end:subscribe(function()
output_log:add_log_text("Timer Cycle End") output_log:add_log_text("Timer Cycle End")
end) end)
@ -320,7 +320,7 @@ function M.get_examples()
code_url = "example/examples/basic/hotkey/basic_hotkey.lua", code_url = "example/examples/basic/hotkey/basic_hotkey.lua",
component_class = require("example.examples.basic.hotkey.basic_hotkey"), component_class = require("example.examples.basic.hotkey.basic_hotkey"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_hotkey ---@cast instance examples.basic_hotkey
instance.hotkey.on_hotkey_released:subscribe(function() instance.hotkey.on_hotkey_released:subscribe(function()
output_log:add_log_text("Hotkey Released") output_log:add_log_text("Hotkey Released")
end) end)
@ -334,7 +334,7 @@ function M.get_examples()
code_url = "example/examples/basic/scroll/scroll.lua", code_url = "example/examples/basic/scroll/scroll.lua",
component_class = require("example.examples.basic.scroll.scroll"), component_class = require("example.examples.basic.scroll.scroll"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance scroll ---@cast instance examples.scroll
instance.button_tutorial.on_click:subscribe(function() instance.button_tutorial.on_click:subscribe(function()
output_log:add_log_text("Button Tutorial Clicked") output_log:add_log_text("Button Tutorial Clicked")
end) end)
@ -343,7 +343,7 @@ function M.get_examples()
end) end)
end, end,
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance scroll ---@cast instance examples.scroll
local scroll = instance.scroll local scroll = instance.scroll
local is_stretch = instance.scroll.style.EXTRA_STRETCH_SIZE > 0 local is_stretch = instance.scroll.style.EXTRA_STRETCH_SIZE > 0
properties_panel:add_checkbox("ui_elastic_scroll", is_stretch, function(value) properties_panel:add_checkbox("ui_elastic_scroll", is_stretch, function(value)
@ -386,7 +386,7 @@ function M.get_examples()
wheel_by_inertion:set_value(scroll.style.WHEEL_SCROLL_BY_INERTION) wheel_by_inertion:set_value(scroll.style.WHEEL_SCROLL_BY_INERTION)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance scroll ---@cast instance examples.scroll
local info = "" local info = ""
local s = instance.scroll local s = instance.scroll
@ -406,7 +406,7 @@ function M.get_examples()
code_url = "example/examples/basic/scroll_slider/scroll_slider.lua", code_url = "example/examples/basic/scroll_slider/scroll_slider.lua",
component_class = require("example.examples.basic.scroll_slider.scroll_slider"), component_class = require("example.examples.basic.scroll_slider.scroll_slider"),
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance scroll_slider ---@cast instance examples.scroll_slider
local info = "" local info = ""
local s = instance.scroll local s = instance.scroll
@ -426,7 +426,7 @@ function M.get_examples()
code_url = "example/examples/basic/grid/grid.lua", code_url = "example/examples/basic/grid/grid.lua",
component_class = require("example.examples.basic.grid.grid"), component_class = require("example.examples.basic.grid.grid"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance grid ---@cast instance examples.grid
local grid = instance.grid local grid = instance.grid
@ -495,7 +495,7 @@ function M.get_examples()
slider_size:set_value(0.5) slider_size:set_value(0.5)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance grid ---@cast instance examples.grid
local info = "" local info = ""
local grid = instance.grid local grid = instance.grid
@ -514,7 +514,7 @@ function M.get_examples()
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid.lua", code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid"), component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance scroll_bind_grid ---@cast instance examples.scroll_bind_grid
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -538,7 +538,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance scroll_bind_grid ---@cast instance examples.scroll_bind_grid
local info = "" local info = ""
local s = instance.scroll local s = instance.scroll
@ -567,7 +567,7 @@ function M.get_examples()
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_horizontal.lua", code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_horizontal.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_horizontal"), component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_horizontal"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance scroll_bind_grid_horizontal ---@cast instance examples.scroll_bind_grid_horizontal
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -593,7 +593,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance scroll_bind_grid_horizontal ---@cast instance examples.scroll_bind_grid_horizontal
local info = "" local info = ""
local s = instance.scroll local s = instance.scroll
@ -621,7 +621,7 @@ function M.get_examples()
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_points.lua", code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_points.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_points"), component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_points"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance scroll_bind_grid_points ---@cast instance examples.scroll_bind_grid_points
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -645,7 +645,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance scroll_bind_grid_points ---@cast instance examples.scroll_bind_grid_points
local info = "" local info = ""
local s = instance.scroll local s = instance.scroll
@ -674,12 +674,18 @@ function M.get_examples()
code_url = "example/examples/basic/input/basic_input.lua", code_url = "example/examples/basic/input/basic_input.lua",
component_class = require("example.examples.basic.input.basic_input"), component_class = require("example.examples.basic.input.basic_input"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_input ---@cast instance examples.basic_input
instance.input.on_input_select:subscribe(function()
output_log:add_log_text("Input Selected")
end)
instance.input_2.on_input_select:subscribe(function()
output_log:add_log_text("Input 2 Selected")
end)
instance.input.on_input_unselect:subscribe(function(_, text) instance.input.on_input_unselect:subscribe(function(_, text)
output_log:add_log_text("Input: " .. text) output_log:add_log_text("Input Deselected. Text: " .. text)
end) end)
instance.input_2.on_input_unselect:subscribe(function(_, text) instance.input_2.on_input_unselect:subscribe(function(_, text)
output_log:add_log_text("Input 2: " .. text) output_log:add_log_text("Input Deselected. Text: " .. text)
end) end)
end, end,
}, },
@ -691,7 +697,7 @@ function M.get_examples()
code_url = "example/examples/basic/input/input_password.lua", code_url = "example/examples/basic/input/input_password.lua",
component_class = require("example.examples.basic.input.input_password"), component_class = require("example.examples.basic.input.input_password"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance input_password ---@cast instance examples.input_password
instance.input.on_input_unselect:subscribe(function(_, text) instance.input.on_input_unselect:subscribe(function(_, text)
output_log:add_log_text("Input: " .. text) output_log:add_log_text("Input: " .. text)
end) end)
@ -705,7 +711,7 @@ function M.get_examples()
code_url = "example/examples/basic/input/rich_input.lua", code_url = "example/examples/basic/input/rich_input.lua",
component_class = require("example.examples.basic.input.rich_input"), component_class = require("example.examples.basic.input.rich_input"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance rich_input ---@cast instance examples.rich_input
instance.rich_input.input.on_input_unselect:subscribe(function(_, text) instance.rich_input.input.on_input_unselect:subscribe(function(_, text)
output_log:add_log_text("Input: " .. text) output_log:add_log_text("Input: " .. text)
end) end)
@ -743,7 +749,7 @@ function M.get_examples()
gui.PIVOT_NW, gui.PIVOT_NW,
} }
---@cast instance rich_text_tags ---@cast instance examples.rich_text_tags
properties_panel:add_button("ui_pivot_next", function() properties_panel:add_button("ui_pivot_next", function()
pivot_index = pivot_index + 1 pivot_index = pivot_index + 1
if pivot_index > #pivot_list then if pivot_index > #pivot_list then
@ -799,7 +805,7 @@ function M.get_examples()
code_url = "example/examples/basic/swipe/basic_swipe.lua", code_url = "example/examples/basic/swipe/basic_swipe.lua",
component_class = require("example.examples.basic.swipe.basic_swipe"), component_class = require("example.examples.basic.swipe.basic_swipe"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance basic_swipe ---@cast instance examples.basic_swipe
instance.swipe.on_swipe:subscribe(function(_, side, dist, delta_time) instance.swipe.on_swipe:subscribe(function(_, side, dist, delta_time)
output_log:add_log_text("Swipe Side: " .. side) output_log:add_log_text("Swipe Side: " .. side)
end) end)
@ -813,7 +819,7 @@ function M.get_examples()
code_url = "example/examples/basic/checkbox/checkbox.lua", code_url = "example/examples/basic/checkbox/checkbox.lua",
component_class = require("example.examples.basic.checkbox.checkbox"), component_class = require("example.examples.basic.checkbox.checkbox"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance checkbox ---@cast instance examples.checkbox
instance.button.on_click:subscribe(function() instance.button.on_click:subscribe(function()
output_log:add_log_text("Checkbox Clicked: " .. tostring(instance.is_enabled)) output_log:add_log_text("Checkbox Clicked: " .. tostring(instance.is_enabled))
end) end)
@ -827,7 +833,7 @@ function M.get_examples()
code_url = "example/examples/basic/checkbox_group/checkbox_group.lua", code_url = "example/examples/basic/checkbox_group/checkbox_group.lua",
component_class = require("example.examples.basic.checkbox_group.checkbox_group"), component_class = require("example.examples.basic.checkbox_group.checkbox_group"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance checkbox_group ---@cast instance examples.checkbox_group
instance.on_state_changed:subscribe(function(state1, state2, state3) instance.on_state_changed:subscribe(function(state1, state2, state3)
output_log:add_log_text("State: " .. tostring(state1) .. " " .. tostring(state2) .. " " .. tostring(state3)) output_log:add_log_text("State: " .. tostring(state1) .. " " .. tostring(state2) .. " " .. tostring(state3))
end) end)
@ -841,7 +847,7 @@ function M.get_examples()
code_url = "example/examples/basic/radio_group/radio_group.lua", code_url = "example/examples/basic/radio_group/radio_group.lua",
component_class = require("example.examples.basic.radio_group.radio_group"), component_class = require("example.examples.basic.radio_group.radio_group"),
on_create = function(instance, output_log) on_create = function(instance, output_log)
---@cast instance radio_group ---@cast instance examples.radio_group
instance.on_state_changed:subscribe(function(selected) instance.on_state_changed:subscribe(function(selected)
output_log:add_log_text("Selected: " .. selected) output_log:add_log_text("Selected: " .. selected)
end) end)

View File

@ -34,6 +34,37 @@ nodes {
inherit_alpha: true inherit_alpha: true
template: "/example/templates/slider.gui" template: "/example/templates/slider.gui"
} }
nodes {
size {
x: 40.0
y: 260.0
}
type: TYPE_BOX
id: "slider/root"
parent: "slider"
overridden_fields: 4
template_node_child: true
}
nodes {
rotation {
z: 90.0
}
type: TYPE_BOX
id: "slider/slider_back"
parent: "slider/root"
overridden_fields: 2
template_node_child: true
}
nodes {
position {
y: 118.0
}
type: TYPE_BOX
id: "slider/slider_pin"
parent: "slider/root"
overridden_fields: 1
template_node_child: true
}
nodes { nodes {
position { position {
y: 170.0 y: 170.0

View File

@ -48,7 +48,7 @@ end
---@param index number ---@param index number
---@param node node ---@param node node
---@param instance button_component ---@param instance examples.button_component
---@param data table ---@param data table
function M:on_element_add(index, node, instance, data) function M:on_element_add(index, node, instance, data)
instance.text:set_text("Data Item " .. index) instance.text:set_text("Data Item " .. index)
@ -62,7 +62,7 @@ function M:on_element_remove(index, node, instance, data)
end end
---@param instance button_component ---@param instance examples.button_component
function M:on_button_click(instance) function M:on_button_click(instance)
local data = instance:get_data() local data = instance:get_data()
self.on_item_click:trigger(data) self.on_item_click:trigger(data)

View File

@ -11,13 +11,13 @@ function M.get_examples()
code_url = "example/examples/data_list/basic/data_list_basic.lua", code_url = "example/examples/data_list/basic/data_list_basic.lua",
component_class = require("example.examples.data_list.basic.data_list_basic"), component_class = require("example.examples.data_list.basic.data_list_basic"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance data_list_basic ---@cast instance examples.data_list_basic
instance.on_item_click:subscribe(function(index) instance.on_item_click:subscribe(function(index)
output_list:add_log_text("Item clicked: " .. index) output_list:add_log_text("Item clicked: " .. index)
end) end)
end, end,
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance data_list_basic ---@cast instance examples.data_list_basic
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -31,7 +31,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance data_list_basic ---@cast instance examples.data_list_basic
local data_list = instance.data_list local data_list = instance.data_list
local data = data_list:get_data() local data = data_list:get_data()
@ -59,7 +59,7 @@ function M.get_examples()
code_url = "example/examples/data_list/basic/data_list_horizontal_basic.lua", code_url = "example/examples/data_list/basic/data_list_horizontal_basic.lua",
component_class = require("example.examples.data_list.basic.data_list_horizontal_basic"), component_class = require("example.examples.data_list.basic.data_list_horizontal_basic"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance data_list_horizontal_basic ---@cast instance examples.data_list_horizontal_basic
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -69,7 +69,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance data_list_horizontal_basic ---@cast instance examples.data_list_horizontal_basic
local data_list = instance.data_list local data_list = instance.data_list
local data = data_list:get_data() local data = data_list:get_data()
@ -97,14 +97,14 @@ function M.get_examples()
code_url = "example/examples/data_list/add_remove_clear/data_list_add_remove_clear.lua", code_url = "example/examples/data_list/add_remove_clear/data_list_add_remove_clear.lua",
component_class = require("example.examples.data_list.add_remove_clear.data_list_add_remove_clear"), component_class = require("example.examples.data_list.add_remove_clear.data_list_add_remove_clear"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance data_list_add_remove_clear ---@cast instance examples.data_list_add_remove_clear
instance.on_item_click:subscribe(function(index) instance.on_item_click:subscribe(function(index)
instance:remove_item(index) instance:remove_item(index)
output_list:add_log_text("Item removed: " .. index) output_list:add_log_text("Item removed: " .. index)
end) end)
end, end,
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance data_list_add_remove_clear ---@cast instance examples.data_list_add_remove_clear
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -130,7 +130,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance data_list_add_remove_clear ---@cast instance examples.data_list_add_remove_clear
local data_list = instance.data_list local data_list = instance.data_list
local data = data_list:get_data() local data = data_list:get_data()
@ -158,13 +158,13 @@ function M.get_examples()
code_url = "example/examples/data_list/cache_with_component/cache_with_component.lua", code_url = "example/examples/data_list/cache_with_component/cache_with_component.lua",
component_class = require("example.examples.data_list.cache_with_component.cache_with_component"), component_class = require("example.examples.data_list.cache_with_component.cache_with_component"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance data_list_cache_with_component ---@cast instance examples.data_list_cache_with_component
instance.on_item_click:subscribe(function(index) instance.on_item_click:subscribe(function(index)
output_list:add_log_text("Item clicked: " .. index) output_list:add_log_text("Item clicked: " .. index)
end) end)
end, end,
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance data_list_cache_with_component ---@cast instance examples.data_list_cache_with_component
local view_node = instance.scroll.view_node local view_node = instance.scroll.view_node
local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL
@ -178,7 +178,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance data_list_cache_with_component ---@cast instance examples.data_list_cache_with_component
local data_list = instance.data_list local data_list = instance.data_list
local data = data_list:get_data() local data = data_list:get_data()

View File

@ -12,7 +12,7 @@ function M.get_examples()
code_url = "example/examples/gamepad/gamepad_tester/gamepad_tester.lua", code_url = "example/examples/gamepad/gamepad_tester/gamepad_tester.lua",
component_class = require("example.examples.gamepad.gamepad_tester.gamepad_tester"), component_class = require("example.examples.gamepad.gamepad_tester.gamepad_tester"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance gamepad_tester ---@cast instance examples.gamepad_tester
instance.button_left.on_click:subscribe(function() instance.button_left.on_click:subscribe(function()
output_list:add_log_text("Button Left Clicked") output_list:add_log_text("Button Left Clicked")
end) end)

View File

@ -3,7 +3,7 @@ local on_screen_input = require("example.examples.gamepad.on_screen_control.on_s
---@class examples.on_screen_control: druid.component ---@class examples.on_screen_control: druid.component
---@field druid druid.instance ---@field druid druid.instance
---@field on_screen_input on_screen_input ---@field on_screen_input examples.on_screen_input
local M = component.create("on_screen_control") local M = component.create("on_screen_control")
local CHARACTER_SPEED = 700 local CHARACTER_SPEED = 700
@ -19,7 +19,7 @@ function M:init(template, nodes)
self.character_eye_left = self:get_node("eye_left") self.character_eye_left = self:get_node("eye_left")
self.character_eye_right = self:get_node("eye_right") self.character_eye_right = self:get_node("eye_right")
self.on_screen_input = self.druid:new(on_screen_input, "on_screen_input") --[[@as on_screen_input]] self.on_screen_input = self.druid:new(on_screen_input, "on_screen_input")
self.on_screen_input.on_action:subscribe(self.on_action_button, self) self.on_screen_input.on_action:subscribe(self.on_action_button, self)
self.on_screen_input.on_movement:subscribe(self.on_movement, self) self.on_screen_input.on_movement:subscribe(self.on_movement, self)

View File

@ -12,7 +12,7 @@ function M.get_examples()
code_url = "example/examples/layout/basic/basic_layout.lua", code_url = "example/examples/layout/basic/basic_layout.lua",
component_class = require("example.examples.layout.basic.basic_layout"), component_class = require("example.examples.layout.basic.basic_layout"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance basic_layout ---@cast instance examples.basic_layout
properties_panel:add_slider("ui_padding", 0, function(value) properties_panel:add_slider("ui_padding", 0, function(value)
local padding = math.floor((value * 64) * 100) / 100 local padding = math.floor((value * 64) * 100) / 100
@ -71,7 +71,7 @@ function M.get_examples()
end) end)
end, end,
get_debug_info = function(instance) get_debug_info = function(instance)
---@cast instance basic_layout ---@cast instance examples.basic_layout
local layout = instance.layout local layout = instance.layout
local p = layout.padding local p = layout.padding
local info = "" local info = ""

View File

@ -20,7 +20,7 @@ function M.get_examples()
code_url = "example/examples/panthera/animation_blend/animation_blend.lua", code_url = "example/examples/panthera/animation_blend/animation_blend.lua",
component_class = require("example.examples.panthera.animation_blend.animation_blend"), component_class = require("example.examples.panthera.animation_blend.animation_blend"),
properties_control = function(instance, properties_panel) properties_control = function(instance, properties_panel)
---@cast instance animation_blend ---@cast instance examples.animation_blend
local vertical_time = panthera.get_time(instance.animation_vertical) local vertical_time = panthera.get_time(instance.animation_vertical)
local vertical_slider = properties_panel:add_slider("ui_animation_vertical", vertical_time, function(value) local vertical_slider = properties_panel:add_slider("ui_animation_vertical", vertical_time, function(value)

View File

@ -12,7 +12,7 @@ function M.get_examples()
code_url = "example/examples/windows/window_language/window_language.lua", code_url = "example/examples/windows/window_language/window_language.lua",
component_class = require("example.examples.windows.window_language.window_language"), component_class = require("example.examples.windows.window_language.window_language"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance window_language ---@cast instance examples.window_language
instance.on_language_change:subscribe(function(language) instance.on_language_change:subscribe(function(language)
output_list:add_log_text("Language changed to " .. language) output_list:add_log_text("Language changed to " .. language)
end) end)
@ -26,7 +26,7 @@ function M.get_examples()
code_url = "example/examples/windows/window_confirmation/window_confirmation.lua", code_url = "example/examples/windows/window_confirmation/window_confirmation.lua",
component_class = require("example.examples.windows.window_confirmation.window_confirmation"), component_class = require("example.examples.windows.window_confirmation.window_confirmation"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance window_confirmation ---@cast instance examples.window_confirmation
instance.text_header:translate("ui_confirmation") instance.text_header:translate("ui_confirmation")
instance.text_button_accept:translate("ui_confirm") instance.text_button_accept:translate("ui_confirm")
instance.text_button_decline:translate("ui_cancel") instance.text_button_decline:translate("ui_cancel")
@ -48,7 +48,7 @@ function M.get_examples()
code_url = "example/examples/windows/window_info/window_info.lua", code_url = "example/examples/windows/window_info/window_info.lua",
component_class = require("example.examples.windows.window_info.window_info"), component_class = require("example.examples.windows.window_info.window_info"),
on_create = function(instance, output_list) on_create = function(instance, output_list)
---@cast instance window_info ---@cast instance examples.window_info
instance.text_header:translate("ui_information") instance.text_header:translate("ui_information")
instance.text_button_accept:translate("ui_confirm") instance.text_button_accept:translate("ui_confirm")
instance.text_description:translate("ui_example_window_information_text") instance.text_description:translate("ui_example_window_information_text")