// Copyright 2026 Ling71671
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

///|
pub type UIContext = @core.UIContext

///|
pub type Response = @core.Response

///|
pub type Id = @core.Id

///|
pub type IdStack = @core.IdStack

///|
pub type Painter = @core.Painter

///|
pub type WidgetStyle = @core.WidgetStyle

///|
pub type Theme = @core.Theme

///|
pub type RawInput = @core.RawInput

///|
pub type InputState = @core.InputState

///|
pub type Key = @core.Key

///|
pub type Modifiers = @core.Modifiers

///|
pub type Event = @core.Event

///|
pub type Memory = @core.Memory

///|
pub fn string_slice(s : String, start : Int, end : Int) -> String {
  @core.string_slice(s, start, end)
}

///|
pub fn prev_char_boundary(text : String, pos : Int) -> Int {
  @core.prev_char_boundary(text, pos)
}

///|
pub fn next_char_boundary(text : String, pos : Int) -> Int {
  @core.next_char_boundary(text, pos)
}

///|
pub fn delete_prev_char(text : String, pos : Int) -> (String, Int) {
  @core.delete_prev_char(text, pos)
}

///|
pub fn delete_next_char(text : String, pos : Int) -> String {
  @core.delete_next_char(text, pos)
}

///|
pub fn is_cjk_char(code : Int) -> Bool {
  @core.is_cjk_char(code)
}

///|
pub fn is_cjk_closing_punct(code : Int) -> Bool {
  @core.is_cjk_closing_punct(code)
}