Галерея вспомогательных компонентов Stipple.jl
|
Страница в процессе разработки. |
В статье представлены вспомогательные компоненты Stipple.jl, которые дополняют основную галерею элементов пользовательского интерфейса, используемых в Engee. Эти компоненты применяются реже, однако могут существенно упростить разработку отдельных интерфейсных модулей, обработку пользовательских действий и построение сложных визуальных структур.
Основные компоненты для работы с компонентами Stipple.jl в Engee подробно описаны в статье Галерея основных компонентов Stipple.jl. Текущая статья расширяет эту подборку и включает дополнительные элементы, которые могут быть полезны в определенных сценариях и нестандартных интерфейсных решениях.
Ручка
Ручка

Показать код
-
JULIA
-
HTML
knob(1:1:10, :knob_value, color = "primary")
Реактивный код
@app begin
@in knob_value = 5
end
<q-knob color="primary" :min="1" v-model="knob_value" :max="10" :step="1"></q-knob>
Программное использование
knob(
range::AbstractRange{T} where {T<:Real},
fieldname::Union{Symbol,Nothing} = nothing,
args...;
kwargs...,
)
Отображает элемент ввода с помощью ручки.
Список
Список

Показать код
-
JULIA
-
HTML
list(
bordered = true,
separator = true,
@recur("fruit in List_fruits"),
item(clickable = true, item_section("{{fruit}}")),
)
Реактивный код
@app begin
@out List_fruits = ["orange", "melon", "watermelon"]
end
<q-list bordered="" v-for="fruit in List_fruits" separator="">
<q-item clickable="">
<q-item-section>
{{fruit}}
</q-item-section>
</q-item>
</q-list>
Сложный список

Показать код
-
JULIA
-
HTML
list(
bordered = true,
separator = true,
padding = true,
style = "width:400px",
[
toolbar("Configuration", class = "bg-primary text-white shadow-2"),
item(
clickable = "",
vripple = "",
item_section([
item_label("Content filtering"),
item_label(
caption = true,
"Set the content filtering level to restrict apps that can be downloaded",
),
]),
),
item(
clickable = "",
vripple = "",
item_section([
item_label("Password"),
item_label(
caption = true,
"Require password for purchase or use password to m'estrict purchase",
),
]),
),
separator(spaced = true),
item_label(header = true, "Other"),
separator(spaced = true),
item(
var"v-ripple" = true,
[
item_section(checkbox("", :ListComplex_check)),
item_section([
item_label("Auto-add widgets"),
item_label(caption = true, "Automatically add home screen widgets"),
]),
],
),
item(
var"v-ripple" = true,
[
item_section(side = true, top = true, checkbox("", :ListComplex_check)),
item_section([
item_label("Auto-add widgets"),
item_label(caption = true, "Automatically add home screen widgets"),
]),
],
),
],
)
Реактивный код
@app begin
@in ListComplex_check = "false"
end
<q-list padding="" bordered="" separator="" style="width:400px">
<q-toolbar class="bg-primary text-white shadow-2">
Configuration
</q-toolbar>
<q-item clickable="" v-ripple="">
<q-item-section>
<q-item-label>
Content filtering
</q-item-label>
<q-item-label caption="">
Set the content filtering level to restrict apps that can be downloaded
</q-item-label>
</q-item-section>
</q-item>
<q-item clickable="" v-ripple="">
<q-item-section>
<q-item-label>
Password
</q-item-label>
<q-item-label caption="">
Require password for purchase or use password to m'estrict purchase
</q-item-label>
</q-item-section>
</q-item>
<q-separator spaced=""></q-separator>
<q-item-label header="">
Other
</q-item-label>
<q-separator spaced=""></q-separator>
<q-item v-ripple="">
<q-item-section>
<q-checkbox label="" v-model="ListComplex_check"></q-checkbox>
</q-item-section>
<q-item-section>
<q-item-label>
Auto-add widgets
</q-item-label>
<q-item-label caption="">
Automatically add home screen widgets
</q-item-label>
</q-item-section>
</q-item>
<q-item v-ripple="">
<q-item-section top="" side="">
<q-checkbox label="" v-model="ListComplex_check"></q-checkbox>
</q-item-section>
<q-item-section>
<q-item-label>
Auto-add widgets
</q-item-label>
<q-item-label caption="">
Automatically add home screen widgets
</q-item-label>
</q-item-section>
</q-item>
</q-list>
Программное использование
list(args...; kwargs...)
Список и элемент представляют собой группу компонентов, которые могут работать вместе, чтобы представлять несколько позиций по вертикали в виде единого непрерывного элемента. Они лучше всего подходят для отображения аналогичных типов данных в виде строк информации, таких как список контактов, список воспроизведения или меню. Каждая строка называется элементом. Элемент также можно использовать и вне списка.
Примеры:
-
Вид:
julia > list( bordered = true, separator = true, [ item(clickable = true, vripple = true, [itemsection("Single line item")]), item( clickable = true, vripple = true, [ itemsection([ itemlabel("Item with caption"), itemlabel("Caption", caption = true), ]), ], ), item( clickable = true, vripple = true, [ itemsection([ itemlabel("OVERLINE", overline = true), itemlabel("Item with caption"), ]), ], ), ], )
Аргументы
-
Содержимое
-
separator::Bool— добавляет разделитель между вложенными элементами. -
padding::Bool— добавляет вертикальные отступы в стиле Material Design (сверху и снизу).
-
-
Стиль
-
bordered::Bool— добавляет стандартную рамку вокруг компонента. -
dense::Bool— «плотный» режим; компонент занимает меньше вертикального пространства. -
dark::Bool— сообщает компоненту, что фон темный (меняет стилизацию).
-
Оценка
Оценка

Показать код
-
JULIA
-
HTML
rating(:rating_value, icon = "thumb_up")
Реактивный код
@app begin
@in rating_value = 5
end
<q-rating v-model="rating_value" icon="thumb_up"></q-rating>
Программное использование
rating(fieldname::Union{Symbol,Nothing} = nothing, args...; kwargs...)
Оценка (или же рейтинг) — это компонент, который позволяет пользователям оценивать товары, обычно известный как «Звездный рейтинг».
Примеры:
-
Модель:
julia > @vars RatingModel begin myrating::R{Int} = 3 end -
Вид:
julia > rating(:myrating, size = "1.5em", icon = "thumb_up") julia > rating(:myrating, size = "2em", color = "red-7", icon = "favorite_border") julia > rating(:myrating, size = "2.5em", color = "purple-4", icon = "create")
Аргументы
-
Поведение
-
name::String— имя элемента управления; используется, например, при отправке форм напрямую на сервер по URL. Пример:car_id.
-
-
Содержимое
-
icon::Union{String, Vector}— базовая иконка. Убедитесь, что библиотека иконок подключена (если не используется префиксimg:). Если передан массив, то каждая позиция рейтинга использует соответствующую иконку (индексация с 0). Пример:icon = "map ion-add"илиimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svgилиimg:path/to/some_image.png. -
iconselected::Union{String, Vector}— иконка для выбранного состояния (опционально). Работает аналогичноicon, поддерживает массивы (индексация с 0). -
iconhalf::Union{String, Vector}— иконка для «половинного» состояния рейтинга. Аналогично предыдущим параметрам может быть строкой или массивом.
-
-
Метка
-
max::Union{Int, String}— количество отображаемых иконок. Пример:max = "5".
-
-
Модель
-
noreset::Bool— запрещает стандартное поведение сброса рейтинга в 0 при повторном клике на выбранную иконку.
-
-
Состояние
-
readonly::Bool— переводит компонент в режим «только чтение». -
disable::Bool— компонент выключен (неактивен).
-
-
Стиль
-
size::String— размер в CSS-единицах или одно из стандартных значений (xs|sm|md|lg|xl). Пример:16px,2rem,md. -
color::Union{String, Vector}— цвет иконок (палитра Quasar). В версияхv1.5.0+при передаче массива каждая позиция рейтинга использует свой цвет. Пример:["accent", "grey-7"],primary,teal-10. -
colorselected::Union{String, Vector}— цвет выбранных иконок. Также может быть массивом. Пример:primary teal-10. -
colorhalf::Union{String, Vector}— цвет половинчатых иконок. Пример:primary teal-10. -
nodimming::Bool— отключает затемнение (уменьшение прозрачности) для невыбранных иконок.
-
Ряд
Ряд

Показать код
-
JULIA
-
HTML
[row(span("Hello"), class = "bg-blue-2"), row(span("Genie"), class = "bg-red-2")]
<div class="bg-blue-2 row">
<span>
Hello
</span>
</div>
<div class="bg-red-2 row">
<span>
Genie
</span>
</div>
Область прокрутки
Область прокрутки

Показать код
-
JULIA
-
HTML
scrollarea(
style = "height: 200px; max-width: 300px;",
Html.div(
"Stipple is a reactive UI library for building interactive\n data applications in pure Julia. It uses Genie.jl (on the server side)\n and Vue.js (on the client). Stipple uses a high performance MVVM\n architecture, which automatically synchronizes the state two-way\n (server -> client and client -> server) sending only JSON data over\n the wire. The Stipple package provides the fundamental communication\n layer, extending Genie's HTML API with a reactive component.",
),
)
<q-scroll-area style="height: 200px; max-width: 300px;">
<div>
Stipple is a reactive UI library for building interactive
data applications in pure Julia. It uses Genie.jl (on the server side)
and Vue.js (on the client). Stipple uses a high performance MVVM
architecture, which automatically synchronizes the state two-way
(server -> client and client -> server) sending only JSON data over
the wire. The Stipple package provides the fundamental communication
layer, extending Genie's HTML API with a reactive component.
</div>
</q-scroll-area>
Программное использование
scrollarea(args...; kwargs...)
Компонент «область прокрутки» предлагает удобный способ настройки полос прокрутки путем инкапсуляции вашего содержимого. Представьте его как элемент DOM с функцией overflow: auto, но с вашей собственной полосой прокрутки в пользовательском стиле вместо полосы прокрутки, используемой браузером по умолчанию, и несколькими приятными функциями сверху.
Примеры:
-
Вид:
julia > StippleUI.scrollarea( style = "height: 200px; max-width: 300px;", [Html.div("Stipple is a reactive UI library for building interactive data applications in pure Julia. It uses Genie.jl (on the server side) and Vue.js (on the client). Stipple uses a high performance MVVM architecture, which automatically synchronizes the state two-way (server -> client and client -> server) sending only JSON data over the wire. The Stipple package provides the fundamental communication layer, extending Genie's HTML API with a reactive component.")], )
Аргументы
-
Поведение
-
visible::Bool— ручное управление видимостью полосы прокрутки; переопределяет стандартное поведение появления/исчезновения при наведении курсора. -
delay::Union{Int, String}— задержка (в миллисекундах), в течение которой скроллбар остается видимым после изменения содержимого; после истечения времени область прокрутки исчезает, если курсор не находится над компонентом. Пример:delay="500". -
horizontal::Bool— переключает режим прокрутки: горизонтальная вместо вертикальной (по умолчанию вертикальная). Влияет на функцииgetScrollPosition,getScrollPercentage,setScrollPosition,setScrollPercentage.
-
-
Общее
-
tabindex::Union{Int, String}— значение HTML-атрибутаtabindex, например0или100.
-
-
Стиль
-
dark::Bool— сообщает компоненту, что фон темный (используется для коррекции визуальных эффектов и контрастности). -
barstyle::Union{Vector, String, Dict}— CSS-стили для оформления полос прокрутки (вертикальной и горизонтальной). Пример:barstyle="{ borderRadius: '5px', background: 'red', opacity: 1 }". -
contentstyle::Union{Vector, String, Dict}— CSS-стили для контейнера содержимого внутри области прокрутки.
-
Выбор
Выбор

Показать код
-
JULIA
-
HTML
select(:Select_fruit, options = :Select_fruit_list, label = "Fruits")
Реактивный код
@app begin
@in Select_fruit = ["orange"]
@out Select_fruit_list = ["orange", "melon", "watermelon"]
end
<q-select v-model="Select_fruit" label="Fruits" :options="Select_fruit_list"></q-select>
Четкий выбор с помощью ввода

Показать код
-
JULIA
-
HTML
select(
:SelectClearable_fruit,
options = :SelectClearable_fruit_list,
label = "Fruits",
clearable = true,
useinput = true,
)
Реактивный код
@app begin
@in SelectClearable_fruit = ["orange"]
@out SelectClearable_fruit_list = ["orange", "melon", "watermelon"]
end
<q-select v-model="SelectClearable_fruit" label="Fruits" use-input="" clearable="" :options="SelectClearable_fruit_list"></q-select>
Множественный выбор с чипами

Показать код
-
JULIA
-
HTML
select(
:SelectMultiple_fruit,
options = :SelectMultiple_fruit_list,
label = "Fruits",
clearable = "",
multiple = true,
usechips = true,
)
Реактивный код
@app begin
@in SelectMultiple_fruit = ["orange"]
@out SelectMultiple_fruit_list = ["orange", "melon", "watermelon"]
end
<q-select v-model="SelectMultiple_fruit" label="Fruits" clearable="" multiple="multiple" use-chips="" :options="SelectMultiple_fruit_list"></q-select>
Программное использование
select(fieldname::Symbol, args...; options::Union{Symbol,Vector}, kwargs...)
Примеры:
-
Модель:
julia > @vars SelectModel begin model::R{Vector{String}} = [] networks::R{Vector{String}} = ["Google", "Facebook", "Twitter", "Pinterest", "Reddit"] end -
Вид:
julia > select( :model, options = :networks, useinput = true, multiple = true, clearable = true, filled = true, counter = true, usechips = true, label = "Social Networks", )
Аргументы
-
Поведение
-
name::String— имя элемента управления. Полезно при работе с формами; если не задано, используется значение свойстваfor, если оно существует (например,car_id). -
virtualscrollhorizontal::Bool— включает виртуальную прокрутку в горизонтальном режиме. -
error::Bool— указывает, есть ли у поля ошибки валидации. -
rules::Vector— массив функций или строк с правилами валидации. Если используется строка, она должна соответствовать имени одного из встроенных правил валидации. Пример:["val => val.length <= 3 || 'Используйте не более 3 символов'"] -
reactiverules::Bool— по умолчанию (false) изменение правил не вызывает повторную валидацию до изменения модели. Еслиtrue, изменение правил немедленно запускает валидацию. Имеет накладные расходы по производительности, используйте только при необходимости. -
lazyrules::Bool | String— режим «ленивой» валидации:-
true— проверка правил выполняется только после первого получения полем фокуса. -
false— обычная (стандартная) валидация. -
"ondemand"— валидация выполняется только при ручном вызовеvalidate().
-
-
loading::Bool— отображает индикатор загрузки (spinner), сигнализируя о выполнении процесса. Внешний вид можно переопределить через слотloading. -
clearable::Bool— добавляет иконку очистки, если значение задано (неnull). При клике значение модели сбрасывается вnull. -
autofocus::Bool— автоматически устанавливает фокус на элемент при первом рендеринге. -
for::String— задаетidэлемента управления и атрибутforдля связанногоlabel. Еслиnameне указан, используется и для него (например,myFieldsId). -
hidedropdownicon::Bool— скрывает иконку выпадающего списка. -
fillinput::Bool— заполняет поле текущим значением; полезно совместно сhideselected. Не работает вместе сmultiple. -
newvaluemode::String— определяет поведение при добавлении новых значений:-
add— добавлять значение (даже если оно уже существует); -
add-unique— добавлять только уникальные значения; -
toggle— добавлять или удалять значение в зависимости от его наличия. При использовании этого параметра прослушивание событияnewvalueстановится необязательным.
-
-
autocomplete::String— HTML-атрибут автозаполнения, напримерautocomplete="country". -
transitionshow::String— анимация показа меню/диалога. Одно из встроенных значений, напримерfade,slide-down. -
transitionhide::String— анимация скрытия меню/диалога. Одно из встроенных значений, напримерfade,slide-down. -
behavior::String— переопределяет стандартное динамическое поведение: отображение как меню на компьютере и как диалог на мобильных устройствах.
-
-
Содержимое
-
tablecolspan::Union{Int, String}— количество колонок в таблице (нужно, если используетсяtable-layout: fixed). Пример:tablecolspan="12". -
errormessage::String— текст ошибки валидации (отображается только еслиerror = true). Пример:Username must have at least 5 characters. -
noerroricon::Bool— скрыть иконку ошибки. -
label::Union{String, Symbol}— подпись поля, которая «всплывает» над полем при получении фокуса. Пример:Username. -
stacklabel::Bool— подпись всегда отображается над полем, независимо от содержимого. -
hint::String— подсказка (helper text) под полем. Пример:Fill in between 3 and 12 characters. -
hidehint::Bool— скрывать подсказку, когда поле не в фокусе. -
prefix::String— префикс перед вводимым значением. Пример:$. -
suffix::String— суффикс после значения. Пример:@gmail.com. -
loading::Bool— показывает индикатор загрузки (spinner), сигнализируя о выполнении процесса; можно кастомизировать через слотloading. -
clearable::Bool— добавляет иконку очистки, если значение задано (неundefinedи неnull). При клике значение модели сбрасывается вnull. -
clearicon::String— кастомная иконка для кнопки очистки (используется вместе сclearable). Пример:close. -
labelslot::Bool— включает слотlabel. Нужно установить вtrue, чтобы принудительно использовать слотlabel, если параметрlabelне задан. -
bottomslots::Bool— включает нижние слоты (error,hint,counter). -
counter::Bool— отображает автоматический счетчик символов внизу справа. -
dropdownicon::String— имя иконки выпадающего списка. Требуется библиотека иконок (если не используетсяimg:). Если значение"none", иконка не рисуется (но место под нее может сохраняться). Примеры:map,ion-add,img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg,img:path/to/some_image.png. -
useinput::Bool— использовать поле ввода, в которое пользователь может вводить текст. -
inputdebounce::Union{Int, String}— задержка (debounce) обновления модели ввода в миллисекундах. Пример:500,600.
-
-
Общее
-
tabindex::Union{Int, String}— значение HTML-атрибутаtabindex. Пример:0,100.
-
-
Модель
-
multiple::Bool— разрешает множественный выбор. В этом режиме модель должна быть массивом (Array). -
emitvalue::Bool— обновлять модель значением выбранной опции, а не всем объектом опции целиком.
-
-
Опции
-
options::Vector— список доступных вариантов, из которых пользователь может выбирать. Для лучшей производительности рекомендуется «замораживать» список. Пример:["BMW", "Samsung Phone"]. -
optionvalue::String— имя свойства опции, которое содержит ее значение. Если используется функция, для лучшей производительности следует ссылаться на функцию из области видимости, а не определять ее как inline. Примеры:optionvalue="modelNumber"optionvalue="(item) => item === null ? null : item.modelNumber" -
optionlabel::Union{String, Symbol}— имя свойства опции, которое содержит отображаемую подпись (label). Аналогичноoptionvalue, при использовании функции рекомендуется не задавать ее как inline. Примеры:optionlabel="itemName"optionlabel="(item) => item === null ? null : item.itemName" -
optiondisable::String— имя свойства опции, которое определяет, отключена ли опция. Значение свойства должно быть логическим (Bool). Пример:optiondisable="cannotSelect"optiondisable="(item) => item === null ? null : item.cannotSelect" -
optionsdense::Bool— компактный режим отображения списка опций (занимает меньше места). -
optionsdark::Bool— меню опций отображается в темной цветовой схеме. -
optionsselectedclass::String— CSS-класс для активных/выбранных опций. Можно задать пустую строку, чтобы отключить стандартное оформление (текст + волна цвета). -
optionssanitize::Bool— принудительно использоватьtextContentвместоinnerHTMLпри рендеринге опций. Используйте, если опции могут быть небезопасными (приходят от пользователя). Не применяется при использовании слотаoption. -
optionscover::Bool— раскрытое меню перекрывает компонент (не работает совместно сuseinput). -
menuShrink::Bool— позволяет списку опций быть уже, чем само поле (только в режиме меню). -
mapoptions::Bool— попытка сопоставить подписи модели с элементами изoptions. Имеет небольшие накладные расходы по производительности. При использованииemitvalue = trueобычно требуется включитьmapoptions, чтобы отображать текст подписи в поле выбора вместо значения. Подробнее см. раздел Affecting model.
-
-
Позиционирование
-
menuanchor::String— задает начальную точку (якорь) позиционирования списка опций относительно поля (используется только в режиме меню). Формат: две позиции. Примеры значений:top left,top middle,top right,center left,center middle,center right,bottom left,bottom middle,bottom right,top start,top end,bottom start,bottom end. -
menuself::String— задает собственную точку позиционирования списка опций относительно целевого элемента (используется только в режиме меню). Формат: две позиции. Примеры:top left,top right,center,bottom left -
menuoffset::Vector— массив из двух чисел, задающий смещение списка опций по горизонтали и вертикали в пикселях (используется только в режиме меню). Пример:[8, 8].
-
-
Выбор
-
multiple::Bool— разрешает множественный выбор. В этом режиме модель должна быть массивом (Array). -
displayvalue::Union{Int, String}— переопределяет строковое представление выбранного значения по умолчанию. Используется, если не применяетсяselected slot/scoped slotи не используется атрибутusechips. -
displayvaluesanitize::Bool— принудительно использоватьtextContentвместоinnerHTMLдля рендеринга выбранных значений. Рекомендуется включать, если выбранные значения могут быть небезопасными (например, введены пользователем). Не применяется при использовании слотовselecteditem. -
hideselected::Bool— скрывает выбранный элемент. При этом используется подлежащий input для отображения подписи (вместо вывода выбранного значения справа от поля). Работает только для одиночного выбора (неmultiple). -
maxvalues::Union{Int, String}— максимальное количество значений, которые пользователь может выбрать. Пример:5. -
usechips::Bool— отображать выбранные значения в виде чипов (chip).
-
-
Состояние
-
disable::Bool— переводит компонент в отключенный режим (disabled). -
readonly::Bool— переводит компонент в режим «только для чтения».
-
-
Стиль
-
labelcolor::String— цвет подписи (label) из палитры цветов Quasar. Переопределяет свойствоcolor. В отличие отcolor, подпись всегда сохраняет этот цвет, даже когда поле не в фокусе. Пример:primary,teal-10. -
color::String— основной цвет компонента из палитры цветов Quasar. -
bgcolor::String— цвет фона компонента из палитры цветов Quasar. -
dark::Bool— указывает, что фон компонента темный. -
filled::Bool— использовать стиль «filled» для поля. -
outlined::Bool— использовать контурный (outlined) стиль для поля. -
borderless::Bool— использовать стиль без рамок (borderless). -
standout::Union{Bool, String}— использовать стильstandoutдля поля. Можно указать CSS-классы, которые будут применяться при фокусе (переопределяя поведение по умолчанию). Пример:standout="bg-primary text-white". -
hidebottomspace::Bool— не резервировать место под областиhint/error/counter, если они не используются. Также отключает анимацию этих элементов и позволяет области ошибок/подсказок растягиваться по вертикали в зависимости от содержимого. -
rounded::Bool— применяет стандартное небольшое скругление углов для квадратной формы компонента. -
square::Bool— убирает скругление углов, делая компонент строго квадратным. Переопределяет свойстваrounded. -
dense::Bool— компактный режим отображения, занимает меньше места. -
itemaligned::Bool— выравнивает внутренний контент в соответствии с элементами компонента. -
popupcontentclass::String— CSS-классы для содержимого всплывающего окна. Пример:my-special-class. -
popupcontentstyle::Union{Vector, String, Dict}— стили CSS для содержимого всплывающего окна. Пример:popupcontentstyle="background-color: #ff0000"popupcontentstyle="{ backgroundColor: '#ff0000' }" -
inputclass::Union{Vector, String, Dict}— CSS-классы, применяемые к underlying input-элементу. Пример:my-special-class. -
inputstyle::Union{Vector, String, Dict}— стили CSS, применяемые к underlying input-элементу. Пример:inputstyle="background-color: #ff0000"inputstyle="{ backgroundColor: '#ff0000' }"
-
-
Виртуальная прокрутка
-
virtualscrollslicesize::Union{Int, String}— минимальное количество элементов, которые должны быть отрисованы в виртуальном списке. Пример:virtualscrollslicesize="60" -
virtualscrollsliceratiobefore::Union{Int, String}— коэффициент количества элементов в видимой области, которые должны быть отрисованы до текущей области видимости. Пример:virtualscrollsliceratiobefore="30" -
virtualscrollsliceratioafter::Union{Int, String}— коэффициент количества элементов в видимой области, которые должны быть отрисованы после текущей области видимости. Пример:virtualscrollsliceratioafter="0.3" -
virtualscrollitemsize::Union{Int, String}— размер одного элемента списка в пикселях (высота — для вертикального списка, ширина — для горизонтального). Значение используется при первичной отрисовке списка. Рекомендуется указывать значение, близкое к минимальному размеру элемента. Пример:virtualscrollitemsize="48" -
virtualscrollstickysizestart::Union{Int, String}— размер «липкой» области в начале списка в пикселях (если используется). Корректное значение повышает точность прокрутки. Пример:virtualscrollstickysizestart="23" -
virtualscrollstickysizeend::Union{Int, String}— размер «липкой» области в конце списка в пикселях (если используется). Корректное значение повышает точность прокрутки. -
tablecolspan::Union{Int, String}— количество колонок в таблице. Требуется при использовании табличной раскладки с фиксированной шириной (table-layout: fixed). Пример:tablecolspan="3"
-
Разделитель
Разделитель

Показать код
-
JULIA
-
HTML
[p("above"), separator(color = "primary"), p("below")]
<p>
above
</p>
<q-separator color="primary"></q-separator>
<p>
below
</p>
Программное использование
separator(args...; kwargs...)
Компонент «разделитель» используется для разделения фрагментов текста, других компонентов и т.д. Он создает цветную линию по ширине родительского элемента. Она может быть горизонтальной или вертикальной.
Спиннер
Спиннер

Показать код
-
JULIA
-
HTML
[
spinner("hourglass", color = "primary", size = "20px", @iif("spinner_count <10")),
p("{{spinner_count}}"),
btn("Start timer", @click(:spinner_start), loading = :spinner_start),
]
Реактивный код
@app begin
@out spinner_count = 0
@in spinner_start = false
@onbutton spinner_start begin
while spinner_count <= 10
@show spinner_count
spinner_count += 1
sleep(0.5)
end
spinner_count = 0
end
end
<q-spinner-hourglass color="primary" v-if="spinner_count <10" size="20px"></q-spinner-hourglass>
<p>
{{spinner_count}}
</p>
<q-btn :loading="spinner_start" label="Start timer" v-on:click="spinner_start = true"></q-btn>
Программное использование
spinner(spinner_type::Union{String,Symbol} = "", args...; kwargs...)
Компонент «спиннер» используется для того, чтобы показать пользователю, какой процесс выполняется в данный момент. Это важная функция UX, которая дает пользователю ощущение, что система продолжает работать для выполнения долгосрочных задач, таких как получение данных с сервера или какие-либо сложные вычисления.
Примеры:
-
Модель:
julia > @vars SpinnerModel begin box::R{String} = "box" comment::R{String} = "comment" hourglass::R{String} = "hourglass" end -
Вид:
julia > spinner(color = "primary", size = "3em") julia > spinner(:box, color = "orange", size = "5.5em") julia > spinner(:comment, color = "green", size = "3em") julia > spinner(:hourglass, color = "purple", size = "4em")
Аргументы
-
size::String— размер компонента в CSS-единицах. Можно указывать конкретное значение с единицей измерения или стандартное имя размера. Поддерживаемые значения:xs,sm,md,lg,xl. Примеры:16px,2rem,xs,md -
color::String— цвет компонента из цветовой палитры Quasar. Примеры:primary,teal,teal-10. -
thickness::Int— толщина линии (stroke-width). Используется для управления визуальной «жирностью» компонента. Пример:thickness = 5
Поле времени
Поле времени

Показать код
-
JULIA
-
HTML
timefield(
"Start time",
:Timefield_start_time,
timepicker_props = Dict(
:nowbtn => true,
:nounset => true,
:format24h => true,
:withseconds => true,
),
textfield_props = Dict(:bgcolor => "blue-1"),
)
Реактивный код
@app begin
@in Timefield_start_time = Dates.Time(now())
end
<q-input filled="" label="Start time" v-model="Timefield_start_time" clearable="" bg-color="blue-1">
<q-icon name="alarm" class="cursor-pointer" style="height: 100%;">
<q-popup-proxy cover="" transition-show="scale" transition-hide="scale">
<q-time with-seconds="" format24h="" v-model="Timefield_start_time" now-btn="" no-unset="" mask="HH:mm:ss"></q-time>
</q-popup-proxy>
</q-icon>
</q-input>
Программное использование
timefield(args...; kwargs...)
Сложный тип ввода, который сочетает в себе текстовое поле со значком, средство выбора времени и всплывающее окно. Средство выбора времени по умолчанию скрыто и отображается при нажатии на значок. Всплывающее окно используется для скрытия средства выбора времени, когда пользователь нажимает за его пределами. Определен ряд общих аргументов, которые передаются в текстовое поле, значок, всплывающее окно и средство выбора времени. Кроме того, аргументы ключевых слов могут быть переданы каждому из этих компонентов по отдельности с помощью аргументов ключевых слов textfield_props, icon_props, popup_proxy_props и timepicker_props.
Выбор времени
Выбор времени

Показать код
-
JULIA
-
HTML
[
timepicker(:timepicker_time, mask = "HH:mm"),
timepicker(:timepicker_time, mask = "HH:mm:ss"),
]
Реактивный код
@app begin
@in timepicker_time = Dates.Time(20, 23, 5)
end
<q-time v-model="timepicker_time" mask="HH:mm"></q-time>
<q-time v-model="timepicker_time" mask="HH:mm:ss"></q-time>
Программное использование
tabpanelgroup(args...; kwargs...)
Компонент «Выбор времени» предоставляет метод ввода времени.
Примеры:
-
Модель:
julia > @vars TabPanelModel begin time::R{Time} = Dates.Time(t -> Dates.minute(t) == 20, 23) timewithseconds::R{Time} = Dates.Time(t -> Dates.second(t) == 12, 20, 23) end -
Вид:
julia > Html.div( class = "q-gutter-md", [timepicker(:time, mask = "HH:mm"), timepicker(:timewithseconds, mask = "HH:mm:ss")], )
Аргументы
-
Поведение
-
name::String— имя компонента. Полезно при работе с формами, которые отправляются напрямую по URL (например,car_id). -
landscape::Bool— отображать компонент в альбомной ориентации. -
format24h::Bool— принудительно использовать 24-часовой формат времени вместо AM/PM. -
options::String— позволяет ограничить допустимое время выбора. Переопределяется параметрамиhour-options,minute-optionsиsecond-options, если они заданы. Для лучшей производительности рекомендуется задавать значение из области видимости, а не inline. Пример:options!="(hr, min, sec) => hr <= 6" -
optionshour::Array— список допустимых часов. Переопределяетoptions, если задан. Пример:optionshour!="[3,6,9]" -
optionsminute::Array— список допустимых минут. Переопределяетoptions, если задан. Пример:optionsminute!="[3,6,9]" -
optionssecond::Array— список допустимых секунд. Переопределяетoptions, если задан. Пример:optionssecond!="[3,6,9]" -
withseconds::Bool— разрешает установку времени с учетом секунд.
-
-
Содержимое
-
nowbtn::Bool— отображает кнопку для выбора текущего времени.
-
-
Модель
-
mask::String— маска форматирования, используемая для разбора и отображения значения. Пример:HH:mm:ss -
withseconds::Bool— разрешает выбор времени с секундами (дублирует одноименный параметр поведения).
-
-
Состояние
-
readonly::Bool— переводит компонент в режим «только для чтения». -
disable::Bool— переводит компонент в отключенное состояние.
-
-
Стиль
-
color::String— цвет компонента из палитры цветов. -
textcolor::String— цвет текста (переопределяет основной цвет, если необходимо). Используются значения из палитры цветов Quasar. -
dark::Bool— указывает, что компонент используется на темном фоне. -
square::Bool— убирает скругление углов, делая компонент квадратным. -
flat::Bool— применяет «плоский» стиль (без тени, используется по умолчанию). -
bordered::Bool— добавляет стандартную рамку вокруг компонента.
-
Временная шкала
Временная шкала

Показать код
-
JULIA
-
HTML
[
timeline(
color = "secondary",
[
timelineentry("Timeline Heading", heading = true),
timelineentry(title = "Event Title", subtitle = "February 22, 1986"),
timelineentry(
title = "Event Title",
subtitle = "February 22, 1986",
avatar = "https://cdn.quasar.dev/img/avatar2.jpg",
[
Html.div(
"Lorem ipsum dolor sit amet, consectetur adipisicing elit,\n sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in\n reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.",
),
],
),
],
),
]
<q-timeline color="secondary">
<q-timeline-entry heading="">
Timeline Heading
</q-timeline-entry>
<q-timeline-entry title="Event Title" subtitle="February 22, 1986"></q-timeline-entry>
<q-timeline-entry avatar="https://cdn.quasar.dev/img/avatar2.jpg" title="Event Title" subtitle="February 22, 1986">
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</div>
</q-timeline-entry>
</q-timeline>
Программное использование
timeline(args...; kwargs...)
Компонент «Временная шкала» отображает список событий в хронологическом порядке. Обычно он представляет собой графический дизайн, на котором изображена длинная полоса, помеченная датами и, как правило, событиями. Временные шкалы могут использовать любую временную шкалу, в зависимости от темы и данных.
Примеры:
-
Вид:
julia > Html.div( class = "q-px-lg q-pb-md", [ timeline( color = "secondary", [ timelineentry("Timeline Heading", heading = true), timelineentry( title = "Event Title", subtitle = "February 22, 1986", [ Html.div( "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", ), ], ), timelineentry( title = "Event Title", subtitle = "February 21, 1986", icon = "delete", [ Html.div( "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", ), ], ), timelineentry( title = "Event Title", subtitle = "February 22, 1986", avatar = "https://cdn.quasar.dev/img/avatar2.jpg", [ Html.div( "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", ), ], ), ], ), ], )
Аргументы
-
Поведение
-
side::String— сторона, на которой размещаются элементы временной шкалы (timeline) в режимахdenseиcomfortable. Для режимаlooseпараметр игнорируется и переопределяется свойствомsideу отдельных элементов (timelineentry). Значение по умолчанию:right. Допустимые значения:left,right -
layout::String— режим компоновки временной шкалы. Значение по умолчанию:dense. Поддерживаемые значения:-
dense— компактный режим: содержимое и подписи располагаются по одной стороне (значение по умолчанию); -
comfortable— содержимое располагается с одной стороны, подписи — с противоположной; -
loose— содержимое располагается по обе стороны временной линии.
-
-
-
Стиль
-
color::String— основной цвет компонента из цветовой палитры Quasar. Примеры:primary,teal-10 -
dark::Bool— указывает, что компонент используется на темном фоне.
-
Тумблер
Тумблер

Показать код
-
JULIA
-
HTML
toggle("Toggle", :Toggle_value, color = "blue")
Реактивный код
@app begin
@in Toggle_value = "true"
end
<q-toggle color="blue" label="Toggle" v-model="Toggle_value"></q-toggle>
Тумблер с пользовательским значением true/false

Показать код
-
JULIA
-
HTML
toggle(
"Click me!",
:ToggleValue_value,
color = "blue",
var"true-value" = "On",
var"false-value" = "Off",
)
Реактивный код
@app begin
@in ToggleValue_value = "true"
end
<q-toggle color="blue" false-value="Off" true-value="On" label="Click me!" v-model="ToggleValue_value"></q-toggle>
Множественный тумблер

Показать код
-
JULIA
-
HTML
Html.div(
@recur("toggle in ToggleMultiple_toggle_list"),
toggle(:toggle, :ToggleMultiple_toggle_states, val = :toggle, color = :toggle),
)
Реактивный код
@app begin
@out ToggleMultiple_toggle_list = ["red", "green", "yellow"]
@out ToggleMultiple_toggle_states = ["true", "false", "true"]
end
<div v-for="toggle in ToggleMultiple_toggle_list">
<q-toggle :color="toggle" :val="toggle" :label="toggle" v-model="ToggleMultiple_toggle_states"></q-toggle>
</div>
Программное использование
toggle(label::Union{String,Symbol}, fieldname::Union{Symbol,Nothing}, args...; kwargs...)
Компонент «тумблер» является еще одним базовым элементом для пользовательского ввода. Его можно использовать для включения и выключения настроек, функций или ввода true/false.
Примеры:
-
Модель:
julia > @vars ToggleModel begin value::R{Bool} = false selection::R{Vector{String}} = ["yellow", "red"] end -
Вид:
julia > toggle("Blue", color = "blue", :selection, val = "blue") julia > toggle("Yellow", color = "yellow", :selection, val = "yellow") julia > toggle("Green", color = "green", :selection, val = "green") julia > toggle("Red", color = "red", :selection, val = "red")
Аргументы
-
Поведение
-
name::String— имя компонента. Полезно при работе с формами, отправляемыми напрямую по URL. Пример:car_id -
indeterminatevalue::Union{Int, Float64, String, Bool}— значение модели, которое считается состоянием «не определено». Значение по умолчанию:null. Пример:"not_answered" -
toggleorder::String— определяет порядок переключения состояний. Значение по умолчанию:"tf". Доступны:-
t— состояниеtrue -
f— состояниеfalse -
i— состояниеindeterminateЕсли
toggle-indeterminate=true, порядок будет:indet → first state → second state → indet → …. В противном случае:indet → first state → second state → first state → …. Примеры:"tf","tft"
-
-
toggleindeterminate::Bool— определяет, нужно ли при клике/нажатии переключаться через состояниеindeterminate. -
keepcolor::Bool— сохранять ли указанный цвет компонента при выключенном состоянии.
-
-
Содержимое
-
icon::String— имя иконки по соглашению Quasar. Убедитесь, что библиотека иконок подключена, если не используется префиксimg:. Если указано значение"none", то иконка не отображается (но место под нее сохраняется). Примеры:map,ion-add,img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg,img:path/to/some_image.png.
-
-
Общие параметры
-
tabindex::Union{Int, String}— значение HTML-атрибутаtabindex. Пример:0,100
-
-
Иконки
-
checkedicon::String— иконка, отображаемая при включенном состоянии (checked). -
uncheckedicon::String— иконка, отображаемая при выключенном состоянии (unchecked). -
indeterminateicon::String— иконка, отображаемая при состоянииindeterminate.
-
-
Подпись
-
label::Union{String, Symbol}— текст подписи, отображаемой рядом с компонентом. Пример:I agree to terms and conditions -
leftlabel::Bool— если указано, подпись будет отображаться слева от компонента.
-
-
Модель
-
val::Union{Bool, Int, Float64, String, Vector}— используется, когда модель (value) является массивом (Array). Определяет, какое значение добавлять или удалять из модели при включении/выключении компонента. Пример:["a", "b", "c"] -
truevalue::Union{Bool, Int, Float64, String, Vector}— значение модели, которое считается состоянием «включено / отмечено». Значение по умолчанию:trueПример:"Agreed" -
falsevalue::Union{Bool, Int, Float64, String, Vector}— значение модели, которое считается состоянием «выключено / не отмечено». Значение по умолчанию:false. Пример:"Not agreed"
-
-
Состояние
-
disabled::Bool— переводит компонент в отключенное состояние (недоступен для взаимодействия).
-
-
Стиль
-
size::String— размер компонента в CSS-единицах или стандартное имя размера. Поддерживаемые значения:xs,sm,md,lg,xl. Примеры:16px,1.5rem,xs,md -
color::String— основной цвет компонента из цветовой палитры Quasar. Пример:primary,teal-10 -
dark::Bool— указывает, что компонент используется на темном фоне. -
dense::Bool— компактный режим отображения (занимает меньше пространства). -
iconcolor::String— переопределяет цвет иконки (применяется только для состоянияtrue). Цвет задается значением из цветовой палитры Quasar. Пример:primary,teal-10
-
Панель инструментов
Панель инструментов

Показать код
-
JULIA
-
HTML
[
toolbar(
class = "text-primary",
[
btn(flat = true, round = true, dense = true, icon = "menu"),
toolbartitle("Toolbar"),
btn(flat = true, round = true, dense = true, icon = "more_vert"),
],
),
]
<q-toolbar class="text-primary">
<q-btn flat="" round="" label="" icon="menu" dense=""></q-btn>
<q-toolbar-title>
Toolbar
</q-toolbar-title>
<q-btn flat="" round="" label="" icon="more_vert" dense=""></q-btn>
</q-toolbar>
Программное использование
toolbar(args...; kwargs...)
Панель инструментов — это компонент, который обычно входит в верхний и нижний колонтитулы макета, но его можно использовать в любом месте страницы.
Примеры:
-
Вид:
julia > toolbar( class = "text-primary", [ btn(flat = true, round = true, dense = true, icon = "menu"), toolbartitle("Toolbar"), btn(flat = true, round = true, dense = true, icon = "more_vert"), ], )
Аргументы
-
inset::Bool— применяет вставку к содержимому (полезно для последующих панелей инструментов)
Подсказка
Подсказка

Показать код
-
JULIA
-
HTML
[
icon("warning", size = "25px", [tooltip("Fire!")]),
btn("Hover me", color = "primary", [tooltip("Additional info")]),
]
<q-icon name="warning" size="25px">
<q-tooltip>
Fire!
</q-tooltip>
</q-icon>
<q-btn color="primary" label="Hover me">
<q-tooltip>
Additional info
</q-tooltip>
</q-btn>
Программное использование
tooltip(args...; kwargs...)
Загрузчик
Загрузчик

Показать код
-
JULIA
-
HTML
uploader(
multiple = true,
accept = :upl_acceptext,
maxfilesize = :upl_maxsize,
maxfiles = 10,
autoupload = true,
hideuploadbtn = true,
label = "Upload Images",
nothumbnails = true,
style = "max-width: 95%; width: 95%; margin: 0 auto;",
@on("rejected", :rejected),
@on("uploaded", :uploaded),
@on("finish", :finished),
@on("failed", :failed),
@on("uploading", :uploading),
@on("start", :started),
@on("added", :added),
@on("removed", :removed)
)
Реактивный код
@app begin
@out upl_acceptext = ".jpg, .jpeg, .pdf, image/*"
@out upl_imgsrc = "https://placehold.co/600x400"
@out upl_maxsize = 1 * 1024 * 1024
@out upl_caption = "No image selected"
@onchange fileuploads begin
if !(isempty(fileuploads))
@info "File was uploaded: " fileuploads
filename = Random.randstring(10) * "_" * base64encode(fileuploads["name"])
try
isdir(joinpath("public", "uploads")) ||
mkpath(joinpath("public", "uploads"))
mv(fileuploads["path"], joinpath("public", "uploads", filename))
catch e
@error "Error processing file: $(e)"
notify(__model__, "Error processing file: $(fileuploads["name"])")
end
upl_imgsrc = "/uploads/$(filename)"
fileuploads = Dict{AbstractString,AbstractString}()
@show upl_imgsrc
end
end
@event rejected begin
@info "rejected"
notify(__model__, "File rejected. Please make sure it is a valid image file.")
end
@event added begin
@info "added"
end
@event removed begin
@info "removed"
end
@event started begin
@info "started"
end
@event uploading begin
@info "uploading"
end
@event uploaded begin
@info "uploaded"
end
@event finished begin
@info "finished"
notify(__model__, "Upload finished.")
end
@event failed begin
@info "failed"
end
end
<q-uploader v-on:start="function(event) { handle_event(event, 'started') }" label="Upload Images" hide-upload-btn="" auto-upload="" v-on:failed="function(event) { handle_event(event, 'failed') }" v-on:uploaded="function(event) { handle_event(event, 'uploaded') }" no-thumbnails="" v-on:removed="function(event) { handle_event(event, 'removed') }" v-on:finish="function(event) { handle_event(event, 'finished') }" :url="'/____/upload/' + channel_" v-on:rejected="function(event) { handle_event(event, 'rejected') }" max-files="10" v-on:uploading="function(event) { handle_event(event, 'uploading') }" multiple="multiple" :accept="upl_acceptext" v-on:added="function(event) { handle_event(event, 'added') }" style="max-width: 95%; width: 95%; margin: 0 auto;" :max-file-size="upl_maxsize"></q-uploader>
Видео
Видео

Показать код
-
JULIA
-
HTML
video(
src = "https://www.youtube.com/embed/G2iIXMjIIcA?si=n8nETlgI-mRELVBF?cc_load_policy=1",
var":ratio" = "16/9",
)
<q-video src="https://www.youtube.com/embed/G2iIXMjIIcA?si=n8nETlgI-mRELVBF?cc_load_policy=1" :ratio="16/9"></q-video>
Программное использование
video(args...; kwargs...)
Использование компонента «видео» упрощает встраивание видео, такого как Youtube. Кроме того, по умолчанию размер контейнера изменяется в соответствии с ним.
Примеры:
-
Модель:
julia > @vars RadioModel begin v_ratio::R{String} = "16/9" end -
Вид:
julia > video(src = "https://www.youtube.com/embed/dQw4w9WgXcQ") julia > video(ratio = :v_ratio, src = "https://www.youtube.com/embed/k3_tw44QsZQ?rel=0")
Аргументы
-
Доступность
-
title::String— значение нативного HTML-атрибутаtitleдля внутреннего iframe. Используется для улучшения доступности (например, для экранных дикторов).
-
-
Поведение
-
fetchpriority::String— задает относительный приоритет загрузки iframe-документа. Допустимые значения:auto,high,low. Значение по умолчанию:auto -
loading::String— указывает, каким образом браузер должен загружать iframe. Допустимые значения:eager— загружать сразу,lazy— отложенная загрузка. Значение по умолчанию:eager -
referrerpolicy::String— определяет, какойRefererбудет отправляться при загрузке ресурса iframe. Допустимые значения:no-referrer,no-referrer-when-downgrade,origin,origin-when-cross-origin,strict-origin,strict-origin-when-cross-origin,unsafe-url. Значение по умолчанию:strict-origin-when-cross-origin
-
-
Модель
-
src::String— URL-адрес ресурса, отображаемого внутри iframe.
-
-
Стиль
-
ratio::Union{String, Int, Float64}— соотношение сторон отображаемого содержимого. Если значение задается строкой, рекомендуется указывать уже вычисленное значение (а не выражение вроде16/9). Пример:ratio = "1.7777"
-