Документация Engee

Галерея основных компонентов Stipple.jl

Страница в процессе разработки.

В статье представлена галерея основных графических компонентов, используемых в Engee при работе с веб-интерфейсами на базе фреймворка Genie.

Для создания различных информационных панелей и пользовательских интерфейсов используется Stipple.jl — реактивный UI-фреймворк для языка Julia, который входит в состав Genie и предоставляет удобный набор готовых элементов интерфейса.

Компоненты Stipple.jl основаны на библиотеке Quasar (Vue.js) и позволяют формировать интерактивные панели, кнопки, формы, таблицы и другие элементы, которые используются внутри Engee для отображения данных и построения пользовательских интерфейсов.

Ниже приведено описание основных компонентов Stipple.jl для работы в Engee, а также примеры их использования. В статье Галерея вспомогательных компонентов Stipple.jl представлены вспомогательные компоненты, которые также могут быть крайне полезны в менее популярных задачах.

Значок

Значок

badge

Показать код
  • JULIA

  • HTML

badge("1.0.0+", color = "primary")
<q-badge color="primary" label="1.0.0+"></q-badge>

Программное использование

badge()

Компонент «значок» позволяет создавать небольшой значок для отображения контекстной информации, которую нужно выделить и сделать заметной. Часто используется вместе с другими элементами, например с аватаром пользователя, чтобы показывать количество новых сообщений или уведомлений.


Примеры:

  • Модель:

    julia> @vars BadgeModel begin
             myicon = "bluetooth"
           end
  • Вид:

    julia> Html.div("Badge", class = "text-h6", [
             badge("1.0.0+", color = "primary")
           ])

Аргументы
  1. Содержимое

    • floating::Bool — отображать значок в правом верхнем углу относительно родительского элемента.

    • transparent::Bool — включить полупрозрачный режим (примерно 0.8 opacity); полезно для «плавающих» значков.

    • multiline::Bool — разрешить перенос текста на несколько строк.

    • label::Union{String,Int} — основной текст значка; перекрывает слот по умолчанию.

    • align::String — вертикальное выравнивание контента (например: top, middle, bottom).

    • outline::Bool — контурный стиль (цветная обводка и текст без заливки).

  2. Стиль

    • color::String — цвет фона значка из палитры Quasar (например: primary, teal-10).

    • textcolor::String — цвет текста (также из палитры Quasar).

    • rounded::Bool — скругленная форма значка (pill-стиль).

Большое число

Большое число

big number

Показать код
  • JULIA

  • HTML

bignumber(number = "7")
<st-big-number title="" number="7"></st-big-number>

Программное использование

bignumber(
    label::Union{String,Symbol} = "",
    number::Union{Symbol,Number,Nothing} = nothing,
    args...;
    kwargs...,
)

Отображает элемент интерфейса большого числа.

Аргументы
  • label::Union{String,Symbol}

  • number::Union{String,Symbol,Nothing,String}

  • icon::Union{String,Symbol}

  • color::Union{String,Symbol} = «positive»|«negative»

  • arrow::Union{String,Symbol} = «up»|«down»

Кнопка

Кнопка

button

Показать код
  • JULIA

  • HTML

[
    p("Click count: {{Button_count}}"),
    btn("Process", @click(:Button_process)),
    btn("Increase count", @click("Button_count = Button_count+1")),
]
<p>Click count: {{ Button_count }}</p>
<q-btn label="Process" @click="Button_process"></q-btn>
<q-btn label="Increase count" @click="Button_count = Button_count+1"></q-btn>

Кнопка с иконкой

button with icon

Показать код
  • JULIA

  • HTML

[
    btn("Mail", icon = "mail", color = "primary", class = "q-mr-sm"),
    btn("Send", var"icon-right" = "send", color = "secondary", class = "q-mr-sm"),
    btn("Send", icon = "mail", var"icon-right" = "send", color = "orange"),
]
<q-btn color="primary" label="Mail" icon="mail" class="q-mr-sm"></q-btn>
<q-btn color="secondary" label="Send" class="q-mr-sm" icon-right="send"></q-btn>
<q-btn color="orange" label="Send" icon="mail" icon-right="send"></q-btn>

Кнопка с подсказкой

button with tooltip

Показать код
  • JULIA

  • HTML

[btn("Mail", icon = "mail", color = "primary", [tooltip("Send email")])]
<q-btn color="primary" label="Mail" icon="mail">
    <q-tooltip>
        Send email
    </q-tooltip>
</q-btn>

Кнопка с индикатором выполнения

button progress indicator

Показать код
  • JULIA

  • HTML

[
    btn(
        "Process",
        @click(:ButtonProgress_process),
        loading = :ButtonProgress_process,
        color = "primary",
        class = "q-mr-sm",
    ),
    btn(
        "Process",
        @click(:ButtonProgress_process),
        loading = :ButtonProgress_process,
        percentage = :ButtonProgress_progress,
        color = "green",
    ),
]
Реактивный код
@app begin
    @in ButtonProgress_process = false
    @in ButtonProgress_progress = 0.0
    @onbutton ButtonProgress_process begin
        for ButtonProgress_progress = 0:0.1:1
            @show ButtonProgress_progress
            sleep(0.5)
        end
        ButtonProgress_progress = 0.0
    end
end
<q-btn color="primary" :loading="ButtonProgress_process" label="Process" v-on:click="ButtonProgress_process = true" class="q-mr-sm"></q-btn>
<q-btn color="green" :loading="ButtonProgress_process" :percentage="ButtonProgress_progress" label="Process" v-on:click="ButtonProgress_process = true"></q-btn>

Флажок

Флажок

checkbox

Показать код
  • JULIA

  • HTML

checkbox("Checked", :Checkbox_checked)
Реактивный код
@app begin
    @in Checkbox_checked = true
end
<q-checkbox label="Checked" v-model="Checkbox_checked"></q-checkbox>

Множество флажков

multiple checkboxes

Показать код
  • JULIA

  • HTML

[
    checkbox("Orange", :selection, val = "orange", color = "orange"),
    checkbox("Melon", :selection, val = "melon", color = "green"),
    checkbox("Watermelon", :selection, val = "watermelon", color = "red"),
]
Реактивный код
@app begin
    @in CheckboxMultiple_checked = (true, @in(selection = []))
end
<q-checkbox color="orange" val="orange" label="Orange" v-model="selection"></q-checkbox>
<q-checkbox color="green" val="melon" label="Melon" v-model="selection"></q-checkbox>
<q-checkbox color="red" val="watermelon" label="Watermelon" v-model="selection"></q-checkbox>

Программное использование

checkbox(
    label::Union{String,Symbol} = "",
    fieldname::Union{Symbol,Nothing} = nothing,
    args...;
    kwargs...,
)

Компонент «флажок» — еще один базовый элемент для ввода данных пользователем. Его можно использовать, чтобы предоставить пользователю возможность переключать опции.


Примеры:

  • Модель:

    julia > @vars CheckboxModel begin
        valone::R{Bool} = true
    end
  • Вид:

    julia > checkbox(label = "Apples", fieldname = :valone, dense = true, size = "xl")

Аргументы
  1. Поведение

    • name::String — имя контрола; полезно, если форма отправляется напрямую на URL и нужно различать поля по имени.

    • indeterminatevalue::Union{String,Float64,Int,Bool} — значение модели, которое следует считать «неопределенным» (indeterminate).

    • toggleorder::String — порядок переключения двух состояний (t — состояние true, f — состояние false). Если toggle-indeterminate = true, порядок такой: indet → первое состояние → второе состояние → indet (и далее по кругу). В противном случае: indet → первое состояние → второе состояние → первое состояние → второе состояние → …​. Примеры: "tf", "ft".

    • toggleindeterminate::Bool — если true, при клике/тапе по компоненту состояние будет проходить через «неопределенное» (indeterminate).

    • keepcolor::Bool — если указано, цвет компонента (если он задан) сохраняется, даже когда переключатель снят/выключен.

  2. Общие

    • tabindex::Union{Int,String} — значение HTML-атрибута tabindex.

  3. Метка

    • label::Union{String,Symbol} — текст метки, отображаемой рядом с компонентом.

    • leftlabel::Bool — если true, метка (если задана) отображается слева от компонента.

  4. Модель

    • fieldname::Symbol — имя поля модели компонента.

    • val::Union{String,Float64,Int,Bool} — используется, когда модель (value) имеет тип Array. Определяет значение, которое будет добавляться/удаляться при установке/снятии флажка.

    • truevalue::Union{Int,Float64,String} — значение модели, которое считается состоянием «включено / отмечено».

    • falsevalue::Union{Int,Float64,String} — значение модели, которое считается состоянием «выключено / не отмечено».

  5. Состояние

    • disable::Bool — перевести компонент в неактивное (disabled) состояние.

  6. Стиль

    • size::String — размер в единицах CSS (с указанием единицы измерения) или одно из стандартных имен размеров (xs|sm|md|lg|xl). Примеры: "16px", "2rem", "xs", "md".

    • color::String — имя цвета компонента из палитры Quasar, например: primary, teal-10.

    • dark::Bool — сообщает компоненту, что фон под ним темный.

    • dense::Bool — компактный режим; компонент занимает меньше места.

Чип

Чип

chip

Показать код
  • JULIA

  • HTML

chip("Add to calendar", icon = "event")
<q-chip icon="event">
    Add to calendar
</q-chip>

Кликабельный чип

clickable chip

Показать код
  • JULIA

  • HTML

[
    chip(
        "Add event to calendar",
        icon = "event",
        clickable = true,
        @click(:chipClick_clicked)
    ),
    p("Clicks: {{chipClick_clicks}}"),
]
Реактивный код
@app begin
    @in chipClick_clicked = false
    @out chipClick_clicks = 0
    @onbutton chipClick_clicked begin
        chipClick_clicks += 1
    end
end
<q-chip clickable="" icon="event" v-on:click="chipClick_clicked = true">
    Add event to calendar
</q-chip>
<p>
    Clicks: {{chipClick_clicks}}
</p>

Программное использование

chip(args...; kwargs...)

Компонент «чип» представляет собой простую блочную сущность пользовательского интерфейса, которая компактно отображает, например, более сложные базовые данные, такие как контакт.

Чипы могут содержать такие сущности, как аватар, текст или значок, а также, по желанию, указатель. Они также могут быть закрыты или удалены, если это предусмотрено настройками.


Примеры:

  • Вид:

    julia > chip("Add to calendar", icon = "event")

Аргументы
  1. Содержимое

    • icon::String — имя иконки по соглашениям Quasar. Требуется установленная библиотека иконок, если не используется префикс img:. Если указать строку "none", иконка не будет отрисована (но под нее все равно будет зарезервировано место). Примеры: map, ion-add, img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg, img:path/to/some_image.png.

    • iconright::String — имя иконки, отображаемой справа, по тем же правилам, что и icon.

    • iconremove::String — имя иконки для действия «удалить» (кнопка удаления), по тем же правилам, что и icon.

    • iconselected::String — имя иконки, отображаемой для выбранного состояния, по тем же правилам, что и icon.

    • label::Union{String,Int} — текстовое содержимое компонента; перекрывает слот по умолчанию. Примеры: "Joe Doe", "Book", 42.

  2. Общие

    • tabindex::Union{Int,String} — значение HTML-атрибута tabindex (например: 0, 100).

  3. Модель

    • value::Bool — модель, определяющая, должен ли chip отображаться. Значение true по умолчанию означает, что компонент виден.

    • selected::Bool — модель, определяющая, выбран chip или нет. Требуется модификатор .sync.

  4. Состояние

    • clickable::Bool — делает chip кликабельным; в этом режиме он реагирует на наведение и генерирует событие click.

    • removable::Bool — добавляет кнопку удаления; при нажатии генерируются соответствующие события удаления.

    • disable::Bool — переводит компонент в неактивное состояние (disabled).

  5. Стиль

    • ripple::Union{Bool,Dict} — настройка материал-декора «рябь» (эффект клика). Можно отключить (false) или передать объект конфигурации (напр. true, center: true, color: "teal").

    • dense::Bool — компактный режим; компонент занимает меньше места.

    • size::String — размер chip’а по имени или в единицах CSS. Примеры: xs, sm, md, lg, xl, 1rem.

    • dark::Bool — сообщает компоненту, что фон под ним темный (для корректного подбора цветов).

    • color::String — цвет компонента из палитры Quasar, например: primary, teal-10.

    • square::Bool — уменьшает скругление углов по сравнению со значением по умолчанию, делая форму ближе к квадрату.

    • outline::Bool — включает «контурный» стиль: цветная рамка и текст без заливки.

Столбец

Стобец

column

Показать код
  • JULIA

  • HTML

[
    row([
        column(span("Hello"), size = 2, class = "bg-blue-2"),
        column(span("Genie"), size = 4, class = "bg-red-2"),
    ]),
]
<div class="row">
    <div class="bg-blue-2 column col-2">
        <span>
            Hello
        </span>
    </div>
    <div class="bg-red-2 column col-4">
        <span>
            Genie
        </span>
    </div>
</div>

Поле даты

Поле даты

date field

Показать код
  • JULIA

  • HTML

datefield(
    "Start date",
    :Datefield_start_date,
    datepicker_props = Dict(:todaybtn => true, :nounset => true),
    textfield_props = Dict(:bgcolor => "green-1"),
)
Реактивный код
@app begin
    @in Datefield_start_date = today()
end
<q-input filled="" label="Start date" v-model="Datefield_start_date" clearable="" bg-color="green-1">
    <q-icon name="event" class="cursor-pointer" style="height: 100%;">
        <q-popup-proxy cover="" transition-show="scale" transition-hide="scale">
            <q-date today-btn="" v-model="Datefield_start_date" no-unset="" mask="YYYY-MM-DD"></q-date>
        </q-popup-proxy>
    </q-icon>
</q-input>

Программное использование

datefield(args...; kwargs...)

Сложный тип ввода, который сочетает в себе текстовое поле со значком, средство выбора даты и всплывающее окно. Средство выбора даты по умолчанию скрыто и отображается при нажатии на значок. Всплывающее окно используется для скрытия средства выбора даты, когда пользователь нажимает за его пределами. Определен ряд общих аргументов, которые передаются в текстовое поле, значок, всплывающее окно и средство выбора даты. Кроме того, аргументы ключевых слов могут быть переданы каждому из этих компонентов по отдельности с помощью аргументов ключевых слов textfield_props, icon_props, popup_proxy_props и datepicker_props.


Примеры:

datefield(
    "Start date",
    :start_date,
    datepicker_props = Dict(:todaybtn => true, :nounset => true),
    textfield_props = Dict(:bgcolor => "green-1"),
)

Расширение

Расширение

expansion

Показать код
  • JULIA

  • HTML

[
    expansionitem(
        label = "Click here",
        dense = true,
        var"dense-toggle" = true,
        var"expand-separator" = true,
        var"header-class" = "bg-blue-1",
        p(
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.",
        ),
    ),
]
<q-expansion-item expand-separator="" label="Click here" dense="" header-class="bg-blue-1" dense-toggle="">
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.
    </p>
</q-expansion-item>

Программное использование

expansionitem(args...; kwargs...)

Компонент «расширение» позволяет скрывать содержимое, которое не имеет непосредственного отношения к пользователю. Думайте о нем как об элементах-гармошках, которые раскрываются при нажатии на них. Его также называют сворачиваемым.

По сути, это компоненты элементов, наделенные дополнительными функциональными возможностями. Таким образом, они могут быть включены в список и наследовать свойства компонентов элемента.


Примеры:

  • Модель:

    julia > @vars ExpansionModel begin
        dummy::R{Bool} = true
    end
  • Вид:

    julia > list(
        bordered = true,
        class = "rounded-borders",
        [
            expansionitem(
                expandseparator = true,
                icon = "perm_identity",
                label = "Account settings",
                caption = "John Doe",
                [
                    card([
                        cardsection(
                            "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem, eius reprehenderit eos corrupti
                commodi magni quaerat ex numquam, dolorum officiis modi facere maiores architecto suscipit iste
                eveniet doloribus ullam aliquid.",
                        ),
                    ]),
                ],
            ),
            expansionitem(
                expandseparator = true,
                icon = "signal_wifi_off",
                label = "Wifi settings",
                [
                    card([
                        cardsection(
                            "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem, eius reprehenderit eos corrupti
                commodi magni quaerat ex numquam, dolorum officiis modi facere maiores architecto suscipit iste
                eveniet doloribus ullam aliquid.",
                        ),
                    ]),
                ],
            ),
            expansionitem(
                expandseparator = true,
                icon = "drafts",
                label = "Drafts",
                [
                    card([
                        cardsection(
                            "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem, eius reprehenderit eos corrupti
                commodi magni quaerat ex numquam, dolorum officiis modi facere maiores architecto suscipit iste
                eveniet doloribus ullam aliquid.",
                        ),
                    ]),
                ],
            ),
        ],
    )

Аргументы
  1. Поведение

    • duration::Int — длительность анимации (в миллисекундах). Пример: duration="1000".

    • default-opened::Bool — раскрывать элемент по умолчанию при первом рендере. Переопределяется моделью (ReactiveModel), если она используется.

    • expandiconrotategc::Bool — применять события расширения только к иконке раскрытия, а не ко всей шапке элемента.

    • group::String — регистрирует элемент в группе раскрытия. Все элементы в группе должны иметь одинаковое имя группы. Используется для создания поведения в стиле аккордеона. Пример: my-emails.

    • popup::Bool — отображать раскрываемый список в режиме «popup».

  2. Контент

    • icon::String — имя иконки по соглашениям Quasar. Если библиотека иконок не установлена — используйте префикс img:. Если значение none, иконка не отрисовывается (но место под нее занимает пространство). Примеры: map, ion-add, img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg, img:path/to/some_image.png.

    • expandicon::String — имя иконки для состояния «развернуть». Требования аналогичны обычному icon:. Работает только при expandsonitem = false.

    • expandedicon::String — имя иконки для состояния «свернуть». Требования те же, что для expandicon:. Использование отключает анимацию вращения иконки.

    • label::Union{String,Symbol} — заголовок (header label).

    • labellines::Union{Int,String} — обрезка по числу строк, если текст не помещается. При указании более 1 строки работает только в браузерах на основе WebKit (из-за -webkit-line-clamp). Пример: labellines="2".

    • caption::String — подзаголовок (header sub-label). Пример: Unread message: 5.

    • captionlines::Union{Int,String} — обрезка подзаголовка по числу строк (аналогично labellines).

    • headerinsetlevel::Int — применять отступ на уровне заголовка (кроме случаев, когда используется слот header). Полезно, если аватар отсутствует, но нужен выравнивающий отступ. Пример: headerinsetlevel="1".

    • contentinsetlevel::Int — применять отступ к контентной части. Пример: contentinsetlevel="1".

    • expandseparator::Bool — добавить разделитель между заголовком и контентом (как визуальный разграничитель).

  3. Состояние

    • disable::Bool — отключить компонент (режим disabled).

  4. Стиль

    • expand-icon-class::Union{Vector,String,Dict} — применить кастомные CSS-классы к иконке раскрытия. Пример: text-purple.

    • dark::Bool — указать компоненту, что фон страницы темный.

    • dense::Bool — компактный режим, занимает меньше вертикального пространства.

    • densetoggle::Bool — применять компактный режим только к иконке раскрытия.

    • headerstyle::Union{Vector,String,Dict} — применить кастомные стили к шапке компонента. Пример: '#ff0000' headerstyle=opts( backgroundColor: "#ff0000")

Нижний колонтитул

Нижний колонтитул

footer

Показать код
  • JULIA

  • HTML

footer("Genie app footer", class = "bg-blue-1")
<footer class="bg-blue-1">
    Genie app footer
</footer>

Заголовки

Заголовки

heading

Показать код
  • JULIA

  • HTML

heading("Genie app", class = "bg-blue-1")
<header class="bg-blue-1 st-header q-pa-sm">
    <h1 class="st-header__title text-h3">
        Genie app
    </h1>
</header>

Иконка

Иконка

icon

Показать код
  • JULIA

  • HTML

[
    icon("font_download", class = "text-primary", style = "font-size: 32px;")
    icon("warning", class = "text-red", style = "font-size:4rem;")
    icon("format_size", style = "color: #ccc; font-size: 1.4em;")
    icon("print", class = "text-teal", style = "font-size: 4.4em;")
    icon("today", class = "text-orange", style = "font-size: 2em;")
    icon("style", style = "font-size: 3em;")
]
<q-icon name="font_download" class="text-primary" style="font-size: 32px;"></q-icon>
<q-icon name="warning" class="text-red" style="font-size:4rem;"></q-icon>
<q-icon name="format_size" style="color: #ccc; font-size: 1.4em;"></q-icon>
<q-icon name="print" class="text-teal" style="font-size: 4.4em;"></q-icon>
<q-icon name="today" class="text-orange" style="font-size: 2em;"></q-icon>
<q-icon name="style" style="font-size: 3em;"></q-icon>

Программное использование

icon(
    name::Union{String,Symbol},
    args...;
    content::Union{String,Vector,Function} = "",
    kwargs...,
)

Stipple поддерживает по умолчанию: Material Icons, Font Awesome, Ionicons, MDI, Eva Icons, Themify Icons, Line Awesome и Bootstrap Icons.

Кроме того, вы можете самостоятельно добавить поддержку для любой библиотеки значков.


Примеры:

  • Вид:

    julia > icon("font_download", class = "text-primary", style = "font-size: 32px;")
    julia > icon("warning", class = "text-red", style = "font-size:4rem;")
    julia > icon("format_size", style = "color: #ccc; font-size: 1.4em;")
    julia > icon("print", class = "text-teal", style = "font-size: 4.4em;")
    julia > icon("today", class = "text-orange", style = "font-size: 2em;")
    julia > icon("style", style = "font-size: 3em;")

Аргументы
  1. Содержимое

    • tag::String — HTML-тег, который будет использован для рендеринга иконки, если не задана сама иконка или используется SVG-иконка. Примеры: div, i.

    • left::Bool — используется, когда иконка располагается слева от текста/контента; добавляет стандартный отступ справа от иконки.

    • right::Bool — используется, когда иконка располагается справа от текста/контента; добавляет стандартный отступ слева от иконки.

  2. Модель

    • name::String — имя иконки. Необходимо, чтобы библиотека иконок была установлена (если не используется префикс img:). Если указать значение "none", иконка не будет отрисована (но место под нее останется зарезервированным). Примеры: map, ion-add, img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg, img:path/to/some_image.png.

  3. Стиль

    • size::String — размер в единицах CSS (с указанием единицы измерения) или одно из стандартных имен размера. Примеры: 16px, 2rem, xs, md.

    • color::String — имя цвета компонента из палитры Quasar. Примеры: primary, teal-10.

Изображение

Изображение

image

Показать код
  • JULIA

  • HTML

imageview(
    src = "https://learn.genieframework.com/assets/docs/guides/intro/genieframeworkdiagram.svg",
    style = "height: 200px; width: 200px",
)
<q-img src="https://learn.genieframework.com/assets/docs/guides/intro/genieframeworkdiagram.svg" style="height: 200px; width: 200px"></q-img>

Изображение с подписью

image with caption

Показать код
  • JULIA

  • HTML

imageview(
    src = "https://learn.genieframework.com/assets/docs/guides/intro/genieframeworkdiagram.svg",
    Html.div(class = "absolute-bottom text-subtitle1 text-center", "Caption"),
    style = "height: 250px; width: 250px",
)
<q-img src="https://learn.genieframework.com/assets/docs/guides/intro/genieframeworkdiagram.svg" style="height: 250px; width: 250px">
    <div class="absolute-bottom text-subtitle1 text-center">
        Caption
    </div>
</q-img>

Программное использование

imageview(args...; kwargs...)

Компонент imageview упрощает работу с изображениями (любого формата), а также добавляет приятный эффект загрузки и множество других функций (например, возможность устанавливать соотношение сторон).


Примеры:

  • Модель:

    julia > @vars Model begin
        url::R{String} = "https://placeimg.com/500/300/nature"
    end
  • Вид:

    julia >
    imageview(src = :url, spinnercolor = "white", style = "height: 140px; max-width: 150px")
    julia > imageview(
        src = :url,
        style = "height: 140px; max-width: 150px",
        [
            template(
                "",
                "v-slot:loading",
                [spinner(:gears, color = "white", wrap = StippleUI.NO_WRAPPER)],
            ),
        ],
    )

Аргументы
  1. Поведение

    • transition::String — название анимации (одна из встроенных). Примеры: fade, slide-down.

    • nativecontextmenu::Bool — включает нативное контекстное меню браузера для изображения.

  2. Содержимое

    • ratio::Union{String,Int} — принудительное соблюдение соотношения сторон. Примеры: "4/3", "16/9", 1.

    • alt::String — альтернативный текст, отображаемый, если изображение невозможно загрузить.

    • basic::Bool — отключает анимации и переходы; работает быстрее.

    • contain::Bool — гарантирует, что изображение полностью помещается в область отображения (даже если остаются пустые поля по краям).

  3. Модель

    • src::String — путь к изображению. Примеры: src="img/something.png" (из публичной папки); src="assets/my-img.gif" (из assets); src="https://placeimg.com/500/300/nature" (URL)

    • srcset::String — набор вариантов изображения для разных разрешений. Примеры: elva-fairy-320w.jpg 320w, elva-fairy-480w.jpg 480w

    • sizes::String — CSS-условия выбора изображения. Примеры: (max-width: 320px) 280px, (max-width: 480px) 440px, 800px

    • width::String — фиксированная ширина изображения (в px или %). Пример: 280px, 70%.

    • height::String — фиксированная высота изображения. Пример: 300px.

    • placeholdersrc::String — статика, показываемая до загрузки изображения. Пример: src="assets/my-img.gif" src="https://placeimg.com/500/300/nature" (URL)

  4. Стиль

    • color::String — цветовая тема компонента из палитры Quasar. Пример: primary, teal-10.

    • imgclass::Union{Vector,String,Dict} — дополнительные CSS-классы для контейнера изображения. Пример: imgclass! = { 'my-special-class': <условие> }

    • imgstyle::Dict — CSS-стили для контейнера изображения. Пример: imgstyle="{transform: 'rotate(45deg)'}"

    • spinnercolor::String — цвет индикатора загрузки (если используется). Пример: primary, teal-10.

    • spinnersize::String — размер индикатора загрузки (работает при отсутствии собственного loader-слота). Пример: 16px, 2rem.

Ввод текста

Ввод текста

text input

Показать код
  • JULIA

  • HTML

textfield(
    "Label",
    :Text_text,
    bottomslots = "",
    counter = "",
    maxlength = "12",
    dense = "",
    [
        template(
            var"v-slot:append" = "",
            [
                icon(
                    "close",
                    @iif("Text_text !== ''"),
                    @click("Text_text = ''"),
                    class = "cursor-pointer",
                ),
            ],
        ),
    ],
)
Реактивный код
@app begin
    @in Text_text = ""
    @onchange Text_text begin
        println(Text_text)
    end
end
<q-input maxlength="12" bottom-slots="" label="Label" v-model="Text_text" counter="" dense="">
    <template v-slot:append="">
        <q-icon name="close" v-if="Text_text !== ''" v-on:click="Text_text = ''" class="cursor-pointer"></q-icon>
    </template>
</q-input>

Маска для ввода текста

text input mask

Показать код
  • JULIA

  • HTML

textfield(
    "Phone",
    :TextMask_phone,
    filled = "",
    mask = "(###) ### - ####",
    hint = "Mask: (###) ### - ####",
)
Реактивный код
@app begin
    @in TextMask_phone = ""
end
<q-input filled="" hint="Mask: (###) ### - ####" label="Phone" v-model="TextMask_phone" mask="(###) ### - ####"></q-input>

Проверка правильности ввода текста

text input validation

Показать код
  • JULIA

  • HTML

textfield(
    "Required Field",
    :TextValidation_text,
    ref = "inputRef",
    filled = "",
    var":rules" = "[ val => val.length <= 3 || 'Please use maximum 3 characters']",
)
Реактивный код
@app begin
    @in TextValidation_text = ""
end
<q-input filled="" label="Required Field" v-model="TextValidation_text" :rules="[ val => val.length <= 3 || 'Please use maximum 3 characters']" ref="inputRef"></q-input>

Программное использование

textfield(fieldname, args...; kwargs...)

Примеры:

  • Модель:

    julia > @vars TextField begin
        name::R{String} = ""
    end
  • Вид:

    julia > textfield(
        "What's your name *",
        :name,
        name = "name",
        @if(:warin),
        :filled,
        hint = "Name and surname",
        "lazy-rules",
        rules = "[val => val && val.length > 0 || 'Please type something']",
    )

Аргументы
  1. Общие свойства

    • type::String — тип поля. Может быть одним из: text (по умолчанию), textarea, email, tel, number, password, url. Влияет также на то, какая клавиатура будет отображаться на мобильных устройствах.

  2. Поведение

    • name::String — имя компонента. Полезно при работе с формами. Если не задано, берется значение for, если оно существует. Пример: car_id.

    • mask::String — маска ввода или одно из предопределенных значений масок (например, date, datetime, fulltime, phone, card).

    • fillmask::Union{Bool,String} — заполнять ли маску спецсимволами (или использовать строку-значение вместо Bool). Пример: true, "0_*".

    • reversefillmask::Bool — заполнять маску справа налево. Пример: для маски денежных значений.

    • unmaskedvalue::Bool — если включено, модель будет получать значение без служебных символов маски.

    • error::Bool — есть ли у поля ошибка.

    • rules::Vector — набор правил валидации. Если элемент — строка, он должен соответствовать имени встроенного правила. Пример: rules = ["fulltime", val -> length(val) < 3 || "Максимум 3 символа"]

    • reactiverules::Bool — если true, правила проверяются каждый раз при обновлении модели. По умолчанию выключено (ради производительности).

    • lazyrules::Union{Bool,String} — если true, валидация выполняется только после первой потери фокуса. Если "ondemand", то правила проверяются только вручную.

    • loading::Bool — отображать индикатор загрузки; может настраиваться через слот loading.

    • clearable::Bool — показывает иконку очистки, если значение не undefined или null.

    • autofocus::Bool — автоматически сфокусировать поле после отображения.

    • for::String — задает id компонента и привязывает к нему <label>. Если name не указан, то это значение используется и для name.

  3. Содержимое

    • errormessage::String — текст ошибки валидации (отображается, если error=true). Пример: Username must have at least 5 characters.

    • noerroricon::Bool — скрыть иконку ошибки.

    • label::Union{String,Symbol} — текст заголовка поля.

    • stacklabel::Bool — заголовок фиксируется над полем всегда, даже если оно пустое.

    • hint::String — поясняющий текст под полем.

    • hidehint::Bool — скрывать подсказку, если поле не в фокусе и не имеет error.

    • prefix::String — префикс перед текстом ввода (например, $).

    • suffix::String — суффикс после текста (например, @gmail.com).

    • loading::Bool — отображение индикатора загрузки (если слот loading не используется).

    • clearicon::String — иконка очистки; если не указано, используется значение по умолчанию.

    • labelslot::Bool — если true, вместо label используется слот label.

    • bottomslots::Bool — включает нижний слот (ошибки, подсказки, счетчик).

  4. Состояние

    • disable::Bool — отключает поле.

    • readonly::Bool — делает поле только для чтения.

  5. Стиль

    • labelcolor::String — цвет заголовка (отличается от color, потому что действует всегда, даже когда поле не в фокусе). Пример: primary.

    • color::String — цвет поля из палитры Quasar. Пример: teal-10.

    • dark::Bool — фон темный.

    • filled::Bool — стиль «заливки» поля.

    • outline::Bool — стиль «контурного» поля.

    • standout::Union{Bool,String} — стиль выделяющегося поля.

    • borderless::Bool — стиль без рамок.

    • hidebottomspace::Bool — убрать резервное пространство для ошибок/подсказок/счетчика.

    • rounded::Bool — небольшие скругления углов.

    • square::Bool — убрать скругления, полностью квадратный стиль.

    • dense::Bool — компактная версия, занимает меньше места.

    • itemalign::Union{Vector,String,Dict} — выравнивание содержимого.

    • inputclass::Union{Vector,String,Dict} — CSS-классы для <input>.

    • inputstyle::Union{Vector,String,Dict} — стили <input>, например: inputstyle = "{ backgroundColor: '#ff0000' }"

  6. Модель

    • debounce::Union{String,Int} — задержка обновления модели в миллисекундах.Пример: 500.

    • maxlength::Union{String,Int} — максимальная длина строки. Пример: 12.

Переключатель

Переключатель

radio

Показать код
  • JULIA

  • HTML

Stipple.Html.div(
    class = "q-pa-md",
    [
        Stipple.Html.div(
            class = "q-gutter-sm",
            [
                radio("Line", :Radio_shape, val = "line"),
                radio("Rectangle", :Radio_shape, val = "rectangle"),
                radio("Ellipse", :Radio_shape, val = "ellipse"),
                radio("Polygon", :Radio_shape, val = "polygon"),
            ],
        ),
        Stipple.Html.div(
            class = "q-px-sm",
            ["Your selection is: ", strong("{{Radio_shape }}")],
        ),
    ],
)
Реактивный код
@app begin
    @in Radio_shape = "line"
end
<div class="q-pa-md">
    <div class="q-gutter-sm">
        <q-radio val="line" label="Line" v-model="Radio_shape"></q-radio>
        <q-radio val="rectangle" label="Rectangle" v-model="Radio_shape"></q-radio>
        <q-radio val="ellipse" label="Ellipse" v-model="Radio_shape"></q-radio>
        <q-radio val="polygon" label="Polygon" v-model="Radio_shape"></q-radio>
    </div>
    <div class="q-px-sm">
        Your selection is:
        <strong>
            {{Radio_shape }}
        </strong>
    </div>
</div>

Цветной переключатель

colored radio

Показать код
  • JULIA

  • HTML

Stipple.Html.div(
    class = "q-pa-md",
    [
        Stipple.Html.div(
            class = "q-gutter-sm",
            [
                radio("Line", :RadioColor_shape, val = "line", color = "teal"),
                radio("Rectangle", :RadioColor_shape, val = "rectangle", color = "orange"),
                radio("Ellipse", :RadioColor_shape, val = "ellipse", color = "red"),
                radio("Polygon", :RadioColor_shape, val = "polygon", color = "blue"),
            ],
        ),
        Stipple.Html.div(
            class = "q-px-sm",
            ["Your selection is: ", strong("{{RadioColor_shape }}")],
        ),
    ],
)
Реактивный код
@app begin
    @in RadioColor_shape = "line"
end
<div class="q-pa-md">
    <div class="q-gutter-sm">
        <q-radio color="teal" val="line" label="Line" v-model="RadioColor_shape"></q-radio>
        <q-radio color="orange" val="rectangle" label="Rectangle" v-model="RadioColor_shape"></q-radio>
        <q-radio color="red" val="ellipse" label="Ellipse" v-model="RadioColor_shape"></q-radio>
        <q-radio color="blue" val="polygon" label="Polygon" v-model="RadioColor_shape"></q-radio>
    </div>
    <div class="q-px-sm">
        Your selection is:
        <strong>
            {{RadioColor_shape }}
        </strong>
    </div>
</div>

Программное использование

radio(
    label::AbstractString = "",
    fieldname::Union{Symbol,Nothing} = nothing,
    args...;
    kwargs...,
)

Компонент «переключатель» — это еще один базовый элемент для пользовательского ввода. Вы можете использовать его, чтобы предоставить пользователю возможность выбрать вариант из нескольких вариантов.


Примеры:

  • Модель:

    julia > @vars RadioModel begin
        shape::R{String} = "line"
    end
  • Вид:

    julia > radio("Line", :shape, val = "line")
    julia > radio("Rectangle", :shape, val = "rectange")
    julia > radio("Ellipse", :shape, val = "ellipse")
    julia > radio("Polygon", :shape, val = "polygon")

Аргументы
  1. Поведение

    • name::String — имя элемента управления; полезно при работе с формами, отправляемыми напрямую на URL. Пример: car_id.

    • keep-color::Bool — сохранять ли цвет (если задан), когда чекбокс снят.

  2. Общее

    • tabindex::Union{Int, String} — значение HTML-атрибута tabindex.

  3. Модель

    • fieldname::Symbol — имя переменной, к которой выполняется привязка.

  4. Метка

    • label::AbstractString — текст метки.

    • leftlabel::Bool — если указано, метка отображается слева от чекбокса.

  5. Состояние

    • disable::Bool — переводит компонент в состояние «недоступен».

  6. Стиль

    • size::String — размер в единицах CSS или стандартных именах размеров (xs|sm|md|lg|xl). Пример: 16px, 2rem, xs, md.

    • color::String — цвет компонента из палитры Quasar. Пример: primary, teal-10.

    • dark::Bool — сообщает компоненту, что используется темный фон.

    • dense::Bool — компактный режим, уменьшающий вертикальные отступы.

Диапазон

Диапазон

range

Показать код
  • JULIA

  • HTML

[
    range(1:1:30, :Range_r, label = true),
    range(1:1:30, :Range_r, vertical = true, labelalways = true),
]
Реактивный код
@app begin
    @in Range_r = RangeData(1:5)
end
<q-range :min="1" v-model="Range_r" label="" :max="30" :step="1"></q-range>
<q-range vertical="" :min="1" v-model="Range_r" :max="30" label-always="" :step="1"></q-range>

Диапазон с маркерами

range with markers

Показать код
  • JULIA

  • HTML

[
    range(1:1:30, :Range_Markers_r, markers = true, label = true),
    range(1:1:30, :Range_Markers_r, var"marker-labels" = true, color = "orange"),
    range(
        0:5:30,
        :Range_Markers_r,
        markers = true,
        var":marker-labels" = "Range_Markers_labels",
        color = "secondary",
    ),
]
Реактивный код
@app begin
    @in Range_Markers_r = RangeData(0:30)
    @out Range_Markers_labels =
        [Dict(:value => i, :label => string(i) * "%") for i = 0:5:30]
end
<q-range :min="1" v-model="Range_Markers_r" label="" :max="30" markers="" :step="1"></q-range>
<q-range color="orange" :min="1" marker-labels="" v-model="Range_Markers_r" :max="30" :step="1"></q-range>
<q-range color="secondary" :marker-labels="Range_Markers_labels" :min="0" v-model="Range_Markers_r" :max="30" markers="" :step="5"></q-range>

Программное использование

range(start, stop, length)
range(start, stop; length, step)
range(start; length, stop, step)
range(; start, length, stop, step)

Создайте специализированный массив с равномерно расположенными элементами и оптимизированным хранилищем (AbstractRange) из аргументов. Математически диапазон однозначно определяется любыми тремя параметрами: start, step, stop и length. Допустимыми параметрами диапазона являются:

  • Диапазон вызова с любыми тремя параметрами start, step, stop, length.

  • Диапазон вызова с двумя параметрами start, stop, length. В этом случае шаг будет приниматься равным единице. Если оба аргумента являются целыми числами, будет возвращен UnitRange.

  • Диапазон вызова с одним из значений stop или length. Предполагается, что значения start и step равны одному.


Примеры:

julia > range(1, length = 100)
1:100

julia > range(1, stop = 100)
1:100

julia > range(1, step = 5, length = 100)
1:5:496

julia > range(1, step = 5, stop = 100)
1:5:96

julia > range(1, 10, length = 101)
1.0:0.09:10.0

julia > range(1, 100, step = 5)
1:5:96

julia > range(stop = 10, length = 5)
6:10

julia > range(stop = 10, step = 1, length = 5)
6:1:10

julia > range(start = 1, step = 1, stop = 10)
1:1:10

julia > range(; length = 10)
Base.OneTo(10)

julia > range(; stop = 6)
Base.OneTo(6)

julia > range(; stop = 6.5)
1.0:1.0:6.0

Если length не указана и stop - start не является целым числом, кратным step, то будет создан диапазон, который заканчивается перед stop.

julia > range(1, 3.5, step = 2)
1.0:2.0:3.0

Особое внимание уделяется рациональному вычислению промежуточных значений. Чтобы избежать таких накладных расходов, обратитесь к конструктору LinRange.

  • Для использования параметра «Julia 1.1» stop в качестве позиционного аргумента требуется как минимум Julia 1.1.

  • Для соответствия «Julia 1.7» Версиям без аргументов ключевого слова и start в качестве аргумента ключевого слова требуется как минимум версия Julia 1.7.

  • Совместите «Julia 1.8» Для версий с stop в качестве единственного аргумента ключевого слова или length в качестве единственного аргумента ключевого слова требуется как минимум Julia 1.8.


Дополнительная помощь:

Функция range возвращает Base.OneTo, когда аргументы являются целыми числами и:

  • Указано только length;

  • Указано только stop.

Функция range возвращает UnitRange, когда аргументы являются целыми числами и:

  • Указаны только start и stop;

  • Указаны length и stop.

UnitRange не создается, если задан параметр step, даже если шаг равен одному.

Ползунок

Ползунок

slider

Показать код
  • JULIA

  • HTML

slider(1:1:10, :Slider_volume)
Реактивный код
@app begin
    @in Slider_volume = 4
end
<q-slider :min="1" v-model="Slider_volume" :max="10" :step="1"></q-slider>

Ползунок с иконкой

slider with an icon

Показать код
  • JULIA

  • HTML

item([
    itemsection(avatar = "", icon("volume_up", color = "teal")),
    itemsection(slider(0:1:10, :SliderIcon_volume, label = "", color = "teal")),
])
Реактивный код
@app begin
    @in SliderIcon_volume = 4
end
<q-item>
    <q-item-section avatar="">
        <q-icon color="teal" name="volume_up"></q-icon>
    </q-item-section>
    <q-item-section>
        <q-slider color="teal" :min="0" v-model="SliderIcon_volume" label="" :max="10" :step="1"></q-slider>
    </q-item-section>
</q-item>

Программное использование

slider(
    range::AbstractRange{<:Union{Symbol,String,Real}},
    fieldname::Union{Symbol,Nothing} = nothing,
    args...;
    lazy = false,
    kwargs...,
)

Ползунок — это отличный способ для пользователя задать числовое значение между минимальным и максимальным значением, с необязательными шагами между допустимыми значениями. Ползунок также оснащен индикатором фокусировки (выделенная кнопка ползунка), который позволяет регулировать положение ползунка с помощью клавиатуры.


Примеры:

  • Вид:

    julia > slider(1:5:100)

Аргументы
  1. Поведение

    • name::String — имя элемента управления. Полезно при работе с формами, которые отправляются напрямую по URL. Пример: car_id

    • snap::Bool — «прилипание» ползунка к допустимым значениям вместо свободного перемещения. Рекомендуется использовать совместно с параметром step.

    • reverse::Bool — включает обратное направление работы ползунка (инверсия).

    • vertical::Bool — отображает ползунок в вертикальном направлении.

    • labelalways::Bool — всегда отображать подпись элемента.

  2. Содержимое

    • label::Bool — всплывающая подпись, отображаемая при клике/касании ползунка и его перемещении.

    • markers::Union{Bool, Int} — отображать маркеры на шкале. Можно показать маркер для каждого возможного значения модели или указать шаг при помощи числа. Пример: markers="5"

    • dragrange::Bool — пользователь может перемещать диапазон целиком, а не только отдельные ползунки.

    • dragonlyrange::Bool — пользователь может перемещать только диапазон, но не отдельные ползунки.

  3. Общее

    • tabindex::Union{Int, String} — значение HTML-атрибута tabindex. Пример: 100

  4. Подписи

    • labelcolorleft::String — цвет фона левой подписи из цветовой палитры Quasar. Пример: primary, teal-10

    • labeltextcolorleft::String — цвет текста левой подписи из цветовой палитры Quasar.

    • labelcolorright::String — цвет фона правой подписи из цветовой палитры Quasar.

    • labeltextcolorright::String — цвет текста правой подписи из цветовой палитры Quasar.

    • labelvalueleft::Union{String, Int} — переопределяет подпись для минимального значения. Пример: model.min + "px"

    • labelvalueright::Union{String, Int} — переопределяет подпись для максимального значения. Пример: model.max + "px"

  5. Модель

    • range::AbstractRange{T} — диапазон значений, доступных для выбора. Используется формат min:step:max. Также можно использовать символы или строки для ссылки на поля модели. Пример: range="1:2:max" myvalue

    • lazy::Bool — если установлено в true, значение модели обновляется только после отпускания ползунка.

  6. Состояние

    • disable::Bool — переводит компонент в отключенное состояние (недоступен для взаимодействия).

    • readonly::Bool — переводит компонент в режим «только для чтения».

  7. Стиль

    • color::String — основной цвет компонента из цветовой палитры Quasar. Пример: primary, teal-10

    • labelcolor::String — цвет подписи из цветовой палитры Quasar.

    • thumbpath::String — путь к изображению для кастомного «ползунка». Пример: M5 5 h10 v10 h-10 v-10

    • dark::Bool — указывает, что компонент используется на темном фоне.

    • dense::Bool — компактный режим отображения (занимает меньше пространства).

Вкладки

Вкладки

tabs

Показать код
  • JULIA

  • HTML

[
    tabgroup(
        :tab_selected,
        inlinelabel = true,
        class = "bg-primary text-white shadow-2",
        [
            tab(name = "photos", icon = "photos", label = "Photos"),
            tab(name = "videos", icon = "slow_motion_video", label = "Videos"),
            tab(name = "movies", icon = "movie", label = "Movies"),
        ],
    ),
    tabpanels(
        :tab_selected,
        animated = true,
        var"transition-prev" = "scale",
        var"transition-next" = "scale",
        [
            tabpanel(name = "photos", [p("Photos content")]),
            tabpanel(name = "videos", [p("Videos content")]),
            tabpanel(name = "movies", [p("Movies content")]),
        ],
    ),
]
Реактивный код
@app begin
    @in tab_selected = "photos"
end
<q-tabs inline-label="" v-model="tab_selected" class="bg-primary text-white shadow-2">
    <q-tab name="photos" icon="photos" label="Photos"></q-tab>
    <q-tab name="videos" icon="slow_motion_video" label="Videos"></q-tab>
    <q-tab name="movies" icon="movie" label="Movies"></q-tab>
</q-tabs>
<q-tab-panels transition-prev="scale" v-model="tab_selected" transition-next="scale" animated="">
    <q-tab-panel name="photos">
        <p>
            Photos content
        </p>
    </q-tab-panel>
    <q-tab-panel name="videos">
        <p>
            Videos content
        </p>
    </q-tab-panel>
    <q-tab-panel name="movies">
        <p>
            Movies content
        </p>
    </q-tab-panel>
</q-tab-panels>

Программное использование

tabgroup(fieldname::Union{Symbol,Nothing} = nothing, args...; kwargs...)

Компонент «вкладки» — это удобный способ отображения меню. Он очень хорошо сочетается со списком в виде выпадающего содержимого, но ни в коем случае не ограничивается им.


Примеры:

  • Модель:

    julia > @vars TabModel begin
        tab_m::R{String} = "tab"
    end
  • Вид:

    julia > tabgroup(
        :tab_m,
        inlinelabel = true,
        class = "bg-primary text-white shadow-2",
        [
            tab(name = "photos", icon = "photos", label = "Photos"),
            tab(name = "videos", icon = "slow_motion_video", label = "Videos"),
            tab(name = "movies", icon = "movie", label = "Movies"),
        ],
    )

Аргументы
  1. Поведение

    • target::Union{Bool, String} — контрольная точка (breakpoint) в пикселях, при которой контейнер вкладок автоматически переключается в режим выравнивания justify. Значение по умолчанию: 600. Пример: breakpoint != "500"

  2. Содержимое

    • vertical::Bool — вертикальное отображение вкладок (вкладки располагаются друг под другом, а не горизонтально).

    • outsiderarrows::Bool — резервирует место для стрелок прокрутки по краям вкладок (стрелки становятся полупрозрачными, когда неактивны).

    • mobilearrows::Bool — принудительно отображать стрелки прокрутки на мобильных устройствах.

    • align::String — горизонтальное выравнивание вкладок внутри контейнера. Допустимые значения: left, center, right, justify. Значение по умолчанию: center. Пример: align = "right"

    • breakpoint::Union{Int, String} — ширина контейнера вкладок (в пикселях), при которой вкладки автоматически переходят в режим justify. Значение по умолчанию: 600. Пример: breakpoint != "500"

    • lefticon::String — имя иконки для замены стандартной стрелки прокрутки влево, используемой при переполнении вкладок. Пример: arrow_left

    • righticon::String — имя иконки для замены стандартной стрелки прокрутки вправо, используемой при переполнении вкладок. Пример: arrow_right

    • stretch::Bool — при использовании во flex-контейнере вкладки растягиваются по высоте родителя.

    • shrink::Bool — по умолчанию вкладки растягиваются по доступной ширине. При включении этого параметра вкладки перестают растягиваться. Полезно и иногда обязательно при размещении вкладок в toolbar.

    • switchindicator::Bool — переключает позицию индикатора активной вкладки (слева — для вертикального режима, сверху — для горизонтального).

    • narrowindicator::Bool — делает индикатор шириной по содержимому вкладки (текст или иконка), а не по всей ширине вкладки.

    • inlinelabel::Bool — текст вкладки отображается в одну строку с иконкой (если она используется).

    • nocaps::Bool — отключает автоматическое преобразование текста вкладок в верхний регистр (по умолчанию все вкладки отображаются заглавными буквами).

  3. Стиль

    • activeclass::String — CSS-класс, применяемый к активной вкладке.

    • activecolor::String — цвет текста активной вкладки из палитры Color Palette. Примеры: teal-10, primary

    • activebgcolor::String — цвет фона активной вкладки. Примеры: teal-10, primary

    • indicatorcolor::String — цвет индикатора (подчеркивания) активной вкладки. Примеры: teal-10, primary

    • contentclass::String — CSS-класс, применяемый к контейнеру содержимого вкладок.

    • dense::Bool — компактный режим отображения (занимает меньше пространства).

Таблицы

Таблица

table

Показать код
  • JULIA

  • HTML

table(:Table_data, flat = true, bordered = true, title = "Treats")
Реактивный код
@app begin
    @out Table_data = DataTable(
        DataFrame(
            name = [
                "Frozen Yogurt",
                "Ice cream sandwich",
                "Eclair",
                "Cupcake",
                "Gingerbread",
                "Jelly bean",
                "Lollipop",
                "Honeycomb",
                "Donut",
                "KitKat",
            ],
            calories = [159, 237, 262, 305, 356, 375, 392, 408, 452, 518],
            fat = [6.0, 9.0, 16.0, 3.7, 16.0, 0.0, 0.2, 3.2, 25.0, 26.0],
            carbs = [24, 37, 23, 67, 49, 94, 98, 87, 51, 65],
        ),
    )
end
<q-table flat="" bordered="" :columns="Table_data.columns" v-model="Table_data" title="Treats" :data="Table_data.data" row-key="__id"></q-table>

Разбивка таблицы на страницы

table pagination

Показать код
  • JULIA

  • HTML

table(
    :TablePagination_data,
    pagination = :TablePagination_tpagination,
    flat = true,
    bordered = true,
    title = "Treats",
)
Реактивный код
@app begin
    @out TablePagination_data = DataTable(
        DataFrame(
            name = [
                "Frozen Yogurt",
                "Ice cream sandwich",
                "Eclair",
                "Cupcake",
                "Gingerbread",
                "Jelly bean",
                "Lollipop",
                "Honeycomb",
                "Donut",
                "KitKat",
            ],
            calories = [159, 237, 262, 305, 356, 375, 392, 408, 452, 518],
            fat = [6.0, 9.0, 16.0, 3.7, 16.0, 0.0, 0.2, 3.2, 25.0, 26.0],
            carbs = [24, 37, 23, 67, 49, 94, 98, 87, 51, 65],
        ),
    )
    @in TablePagination_tpagination = DataTablePagination(rows_per_page = 3)
end
<q-table flat="" bordered="" :pagination="TablePagination_tpagination" :columns="TablePagination_data.columns" v-model="TablePagination_data" title="Treats" :data="TablePagination_data.data" row-key="__id"></q-table>

Таблица с поиском

table with search

Показать код
  • JULIA

  • HTML

table(
    :TableSearch_data,
    flat = true,
    bordered = true,
    title = "Treats",
    var"row-key" = "name",
    filter = :TableSearch_dfilter,
    hideheader = "",
    template(
        var"v-slot:top-right" = "",
        textfield(
            "",
            :TableSearch_dfilter,
            dense = true,
            debounce = "300",
            placeholder = "Search",
            [template(var"v-slot:append" = true, icon("search"))],
        ),
    ),
)
Реактивный код
@app begin
    @out TableSearch_data = DataTable(
        DataFrame(
            name = [
                "Frozen Yogurt",
                "Ice cream sandwich",
                "Eclair",
                "Cupcake",
                "Gingerbread",
                "Jelly bean",
                "Lollipop",
                "Honeycomb",
                "Donut",
                "KitKat",
            ],
            calories = [159, 237, 262, 305, 356, 375, 392, 408, 452, 518],
            fat = [6.0, 9.0, 16.0, 3.7, 16.0, 0.0, 0.2, 3.2, 25.0, 26.0],
            carbs = [24, 37, 23, 67, 49, 94, 98, 87, 51, 65],
        ),
    )
    @in TableSearch_dfilter = ""
end
<q-table flat="" bordered="" :columns="TableSearch_data.columns" v-model="TableSearch_data" title="Treats" hide-header="" :data="TableSearch_data.data" :filter="TableSearch_dfilter" row-key="name">
    <template v-slot:top-right="">
        <q-input debounce="300" label="" v-model="TableSearch_dfilter" placeholder="Search" dense="">
            <template v-slot:append="">
                <q-icon name="search"></q-icon>
            </template>
        </q-input>
    </template>
</q-table>

Расположение сетки таблицы

table grid layout

Показать код
  • JULIA

  • HTML

table(:TableGrid_data, flat = true, bordered = true, grid = true, title = "Treats")
Реактивный код
@app begin
    @out TableGrid_data = DataTable(
        DataFrame(
            name = [
                "Frozen Yogurt",
                "Ice cream sandwich",
                "Eclair",
                "Cupcake",
                "Gingerbread",
                "Jelly bean",
                "Lollipop",
                "Honeycomb",
                "Donut",
                "KitKat",
            ],
            calories = [159, 237, 262, 305, 356, 375, 392, 408, 452, 518],
            fat = [6.0, 9.0, 16.0, 3.7, 16.0, 0.0, 0.2, 3.2, 25.0, 26.0],
            carbs = [24, 37, 23, 67, 49, 94, 98, 87, 51, 65],
        ),
    )
end
<q-table flat="" bordered="" grid="" :columns="TableGrid_data.columns" v-model="TableGrid_data" title="Treats" :data="TableGrid_data.data" row-key="__id"></q-table>

Программное использование

table(fieldname::Symbol, args...; kwargs...)

Примеры:

  • Модель:

    julia > @vars TableModel begin
        data::R{DataTable} = DataTable(
            DataFrame(rand(100000, 2), ["x1", "x2"]),
            DataTableOptions(columns = [Column("x1"), Column("x2", align = :right)]),
        )
        data_pagination::DataTablePagination = DataTablePagination(rows_per_page = 50)
    end
  • Вид:

    julia > table(
        :data;
        pagination = :data_pagination,
        style = "height: 350px;",
        title = "Random numbers",
    )

Стилизация может быть достигнута с помощью атрибутов cell_class, cell_style, inner_class, inner_style, change_class, change_style, inner_change_class, inner_change_style.

ui() =
    table(:table, edit = ["name", "email", "age"], cell_type = ["text", "text", "number"])

ui() = table(:table, cell_class = "text-blue-10 bg-blue-2")

Более подробную информацию о стилизации и более сложных стилях можно найти в разделе cell_templates.

Ручную стилизацию также можно применить следующим образом:

table(
    :table,
    template(
        @slot(:body - cell, :props),
        [
            StippleUI.td(
                textfield(
                    "",
                    R"props.row[props.col.name]",
                    :dense,
                    :borderless,
                    inputstyle = "font-weight: 400; font-size: 0.9rem; padding-top: 0; padding-bottom: 0",
                ),
            ),
        ],
    ),
)
Обратите внимание на использование макроса @slot, который доступен начиная с Stipple версии 0.28.7. В противном случае используйте var"v-slot:body-cell" = "props".