]> git.proxmox.com Git - ui/proxmox-yew-widget-toolkit.git/log
ui/proxmox-yew-widget-toolkit.git
4 months agocss: fix class for InverseSurface variant
Dominik Csapak [Tue, 3 Sep 2024 13:54:37 +0000 (15:54 +0200)]
css: fix class for InverseSurface variant

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agodropdown: replace on_select callback with DropdownController
Dietmar Maurer [Tue, 3 Sep 2024 11:23:44 +0000 (13:23 +0200)]
dropdown: replace on_select callback with DropdownController

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
4 months agowidget: data table: simplify cursor selection
Dominik Csapak [Tue, 13 Aug 2024 11:42:11 +0000 (13:42 +0200)]
widget: data table: simplify cursor selection

we don't have to check for ctrl here, since just before we clear the
selection if we didn't have ctrl pressed, so `toggle` does the
same as `select` here in that case. Also, this makes it possible
to deselect rows with the simple selection mode.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agowidget: data table: selection column: always use 'pointer' cursor
Dominik Csapak [Tue, 13 Aug 2024 11:42:15 +0000 (13:42 +0200)]
widget: data table: selection column: always use 'pointer' cursor

to indicate it can be clicked

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agowidget: data table: add 'simple' multiselect mode
Dominik Csapak [Tue, 13 Aug 2024 11:42:14 +0000 (13:42 +0200)]
widget: data table: add 'simple' multiselect mode

akin to what extjs does:

clicking a row toggles it instead of deselecting all other keys

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agowidget: data table: improve checkbox clicking in selection column
Dominik Csapak [Tue, 13 Aug 2024 11:42:13 +0000 (13:42 +0200)]
widget: data table: improve checkbox clicking in selection column

by;
* moving the click handler on the whole cell instead of the tiny
  checkbox icon
* stopping propagation, this makes it actually work, since otherwise
  the row would get clicked and it resulted in the usual 'select only
  this row' behavior

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agowidget: data table: column: fix useless code
Dominik Csapak [Tue, 13 Aug 2024 11:42:12 +0000 (13:42 +0200)]
widget: data table: column: fix useless code

it's a noop, so remove it

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
4 months agostate: selection: handle multiselect change more gracefully
Dominik Csapak [Tue, 13 Aug 2024 11:42:10 +0000 (13:42 +0200)]
state: selection: handle multiselect change more gracefully

instead of keeping the respective state, try to be smart about it:
* when changing to multiselect, keep the selection
* when changing from multiselect, clear the map, but keep the selection
  if there was only one

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
5 months agopwt-macros: drop unused dependency on lazy_static
Wolfgang Bumiller [Wed, 14 Aug 2024 09:22:28 +0000 (11:22 +0200)]
pwt-macros: drop unused dependency on lazy_static

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
5 months agosilence another warning
Wolfgang Bumiller [Mon, 12 Aug 2024 13:34:30 +0000 (15:34 +0200)]
silence another warning

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
5 months agosilence warnings
Wolfgang Bumiller [Mon, 12 Aug 2024 12:58:57 +0000 (14:58 +0200)]
silence warnings

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
5 months agoadd .cargo/config.toml to build from debian packages
Wolfgang Bumiller [Mon, 12 Aug 2024 08:12:54 +0000 (10:12 +0200)]
add .cargo/config.toml to build from debian packages

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
5 months agoexamples/counter2 was never checked in, drop it from workspace members
Wolfgang Bumiller [Mon, 12 Aug 2024 07:36:58 +0000 (09:36 +0200)]
examples/counter2 was never checked in, drop it from workspace members

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
5 months agoupdate for theme rename
Dietmar Maurer [Fri, 2 Aug 2024 09:07:27 +0000 (11:07 +0200)]
update for theme rename

Theme Proxmox is now called Crisp.

5 months agoFormContext: trigger onchange after field registration
Dietmar Maurer [Tue, 30 Jul 2024 06:55:29 +0000 (08:55 +0200)]
FormContext: trigger onchange after field registration

6 months agowidget: number field: stop spinner on pointerout
Dominik Csapak [Wed, 17 Jul 2024 13:06:58 +0000 (15:06 +0200)]
widget: number field: stop spinner on pointerout

otherwise it's possible to let the spinner running by
* pressing the mouse button on the spinner
* moving the cursor outside of the spinner
* letting go

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: let MIN/MAX be settable by step-up/down
Dominik Csapak [Wed, 17 Jul 2024 12:22:44 +0000 (14:22 +0200)]
widget: number field: let MIN/MAX be settable by step-up/down

when stepping up or down for signed numbers (e.g. i64)
the MIN/MAX value was not allowed. Fix the check to allow that.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: introduce FocusTracker
Dominik Csapak [Wed, 17 Jul 2024 10:25:02 +0000 (12:25 +0200)]
widget: introduce FocusTracker

this is a helper struct to better handle focusin/out events.
We had the pattern with DelayedFocusChange in a few components, and they
were basically all doing the same.

To factor out, we have to use a bit of a different approach (see the
comment on the struct itself), since we don't want to introduce an extra
component in the component tree for this (since nothing is really
rendered for that).

It's not saving us much code for now, but with every new component
needing that, we can make sure we have the same behavior.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: set/keep focus when using spinner
Dominik Csapak [Wed, 17 Jul 2024 10:24:10 +0000 (12:24 +0200)]
widget: number field: set/keep focus when using spinner

by using 'prevent_default' and setting focus manually from the
pointerdown event.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: add spinner repeat behaviour
Dominik Csapak [Wed, 17 Jul 2024 10:24:09 +0000 (12:24 +0200)]
widget: number field: add spinner repeat behaviour

instead of reacting to each click, react to pointerdown/up
and implement a very basic repeat logic, so that the value
de/increments repeatedly when keep pressing the up/down buttons

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: add spinner elements
Dominik Csapak [Tue, 16 Jul 2024 12:48:04 +0000 (14:48 +0200)]
widget: number field: add spinner elements

we want that as that is expected ux, but since the underlying input
field is of type text, the browser does not show it.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: prevent scrolling of container
Dominik Csapak [Tue, 16 Jul 2024 12:48:03 +0000 (14:48 +0200)]
widget: number field: prevent scrolling of container

if we react to the wheel event of the in input, we don't want to let
the browser scroll any outer container, so prevent that.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: menu: radio button: use dot-circle
Dominik Csapak [Tue, 16 Jul 2024 12:45:08 +0000 (14:45 +0200)]
widget: menu: radio button: use dot-circle

instead of check-cirlce. This is more idiomatic for radio buttons.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dropdown: change picker icon to angle
Dominik Csapak [Tue, 16 Jul 2024 12:45:07 +0000 (14:45 +0200)]
widget: dropdown: change picker icon to angle

this is more in line with what other frameworks and browsers show for
dropdowns

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dropdown: fix non-editable cursor with renderer
Dominik Csapak [Tue, 16 Jul 2024 12:45:06 +0000 (14:45 +0200)]
widget: dropdown: fix non-editable cursor with renderer

when we have a 'rendered' value, the component tree is different, and
we have to put the 'non-editable' class one level higher for it to have
an effect

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: selection view: introduce VisibilityContext
Dominik Csapak [Mon, 15 Jul 2024 13:19:56 +0000 (15:19 +0200)]
widget: selection view: introduce VisibilityContext

this is used with a ContextProvider to provide a visibility information
to children elements, without the need to 'prop drill'.

Currently only used by a selection view, but could be used by all
elements that cache child elements that only show/hide them instead
of letting the dom change.

When using in a generic widget/etc, should react to higher level
visibility contexts.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: selection view: use IndexSet instead of HashSet
Dominik Csapak [Mon, 15 Jul 2024 13:19:55 +0000 (15:19 +0200)]
widget: selection view: use IndexSet instead of HashSet

to have a consistent ordering of items, which is important for
yew's dom diff, even if we have keys on the items.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: selection view: optimize child tree construction
Dominik Csapak [Mon, 15 Jul 2024 13:19:54 +0000 (15:19 +0200)]
widget: selection view: optimize child tree construction

the only thing changing between active/non-active pages are the classes,
so represent that in the code. This deduplicates the html! macro call.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: improve error message
Dominik Csapak [Mon, 15 Jul 2024 13:17:12 +0000 (15:17 +0200)]
widget: number field: improve error message

'Parse number failed' implies that we could not parse the number, but to
know it was too big, we had to parse the number correctly, so this is
confusing. Replacing with 'Input invalid' makes it clearer that what
is actually happening.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: prevent invalid settings with scroll/keyboard
Dominik Csapak [Mon, 15 Jul 2024 13:17:11 +0000 (15:17 +0200)]
widget: number field: prevent invalid settings with scroll/keyboard

By don't in/decreasing the value if it's over the max/under the min
value. To insert a value when scrolling/keyboard even if none was set,
introducing a 'clamp_value' trait fn that simply forwards to the
underlying clamp with T::MIN and T::MAX as defaults. This is then used
to determine the initial value that is set.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: number field: implement scroll in/decrease
Dominik Csapak [Mon, 15 Jul 2024 13:17:10 +0000 (15:17 +0200)]
widget: number field: implement scroll in/decrease

by simply reusing the handlers for keyboard up down

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agodialog: add show_dialog to wrapper for non wasm target
Dominik Csapak [Fri, 12 Jul 2024 11:21:31 +0000 (13:21 +0200)]
dialog: add show_dialog to wrapper for non wasm target

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: align: add note about future with anchor positioning
Dominik Csapak [Fri, 12 Jul 2024 08:01:02 +0000 (10:01 +0200)]
widget: align: add note about future with anchor positioning

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dropdown: rework dialog/focus handling
Dominik Csapak [Fri, 12 Jul 2024 08:01:01 +0000 (10:01 +0200)]
widget: dropdown: rework dialog/focus handling

until now we used a modal dialog for the picker. While had some
advantages for focus/keyboard handling, it made it impossible to have
and 'editable' field while having the dialog open.

So instead, use a non-modal dialog and rework the focus/keyboard handling
to work as expected.

The biggest change here is how keyboard uses can navigate it:

instead of being 'captured' in the picker once it's open, using
tab/shift+tab simply closes the picker should the focus go outside the
current field

With this changes, having an editable dropdown works as expected, the
field gets the focus by default, the picker remains open until it's
closed or the widget loses focus, and one can open/close the picker
manually with the keyboard or trigger.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agodialog: make it possible to open non-modal
Dominik Csapak [Fri, 12 Jul 2024 08:01:00 +0000 (10:01 +0200)]
dialog: make it possible to open non-modal

by adding a 'show_dialog' binding. For this to work correctly in all
situations, we have to adapt the align code to distinguish between modal
and non-modal dialogs, so we set a custom attribute on the dom element
when opening.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dropdown: show focus outline when picker is open
Dominik Csapak [Fri, 12 Jul 2024 08:00:59 +0000 (10:00 +0200)]
widget: dropdown: show focus outline when picker is open

since we cannot only rely on focus for that (the picker often has the
focus), we use a class to achieve the same thing when the picker is
open.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dropdown: mark non editable dropdown as such
Dominik Csapak [Fri, 12 Jul 2024 08:00:58 +0000 (10:00 +0200)]
widget: dropdown: mark non editable dropdown as such

this will change the cursor + remove the caret, as with non editable
comboboxes this gives a better ux.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: selector: add 'clear' trigger
Dominik Csapak [Fri, 12 Jul 2024 08:00:57 +0000 (10:00 +0200)]
widget: selector: add 'clear' trigger

but only when the field is
* not editable (then the user can simply delete the value)
* not disabled (no input possible)
* not empty (nothing to clear)
* not required (empty field is not allowed)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: replace 'icons' with 'triggers' on fields and dropdowns
Dominik Csapak [Fri, 12 Jul 2024 08:00:54 +0000 (10:00 +0200)]
widget: replace 'icons' with 'triggers' on fields and dropdowns

these can not only show icons, but also have an optional onclick handler
and tooltip, so they are much more versatile than just icons.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: input panel: only warn on key generation when in debug mode
Dominik Csapak [Fri, 12 Jul 2024 08:00:53 +0000 (10:00 +0200)]
widget: input panel: only warn on key generation when in debug mode

since it often does no harm at all, but indicates the developer should
probably add keys or names to their fields.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoRevert "example: mobile: fix css paths"
Dietmar Maurer [Wed, 10 Jul 2024 07:46:17 +0000 (09:46 +0200)]
Revert "example: mobile: fix css paths"

This reverts commit 08b87890804ade1114c346fc25b3f67d79acb809.

6 months agoexample: mobile: fix css paths
Dietmar Maurer [Wed, 10 Jul 2024 07:28:51 +0000 (09:28 +0200)]
example: mobile: fix css paths

6 months agoadd debugging info in readme
Dominik Csapak [Tue, 9 Jul 2024 11:55:35 +0000 (13:55 +0200)]
add debugging info in readme

this adds a basic guide to enable wasm/rust debugging in chrome to the
README.md

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: theme loader: switch to one css per theme
Dominik Csapak [Mon, 8 Jul 2024 13:11:56 +0000 (15:11 +0200)]
widget: theme loader: switch to one css per theme

previously we needed two css files per theme, one each for dark and
light mode. We now can make use of only one css file per theme by
setting the respective class on the root element.

Change the theme loader to do that, and change all examples to that as
well.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoWhitepaper: minor improvements
Dietmar Maurer [Sat, 29 Jun 2024 15:35:28 +0000 (17:35 +0200)]
Whitepaper: minor improvements

6 months agowidget: data table: fix lost focus on scroll
Dominik Csapak [Fri, 28 Jun 2024 08:50:10 +0000 (10:50 +0200)]
widget: data table: fix lost focus on scroll

when we selected a row/cell and scrolled away so that the element was
not in the dom, we lost focus and subsequent keypresses scrolled the
view, but did not select the next/previous element.

To fix that, we have to catch this case by checking if the element
behind the cursor still is in the visible range, and if not and there
was no new focus target, we refocus the scroll view.

This way we get the key press events again for the table.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: data table: don't scroll cursor into view when the data changes
Dominik Csapak [Fri, 28 Jun 2024 08:50:09 +0000 (10:50 +0200)]
widget: data table: don't scroll cursor into view when the data changes

in case we have a reloading table, we don't want to jump to the selected
row every time, since this is rather jarring when navigating big lists
that regularly refresh.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: data table: fix scroll position when items vanish
Dominik Csapak [Fri, 28 Jun 2024 08:50:08 +0000 (10:50 +0200)]
widget: data table: fix scroll position when items vanish

in case we're scrolled far down a list of elements, and items are
vanishing so that we're now outside the list, reduce the start so
we're now at the end of the list.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: form: add DisplayField
Dominik Csapak [Thu, 27 Jun 2024 08:32:10 +0000 (10:32 +0200)]
widget: form: add DisplayField

implements a widget that behaves like a field, but just for displaying
values. This way we can easily use that where we would normally use
fields.

This requires a value to set initially and has no way to change or
validate the value (that can all be done from the parent of this
component).

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: data table: fix keyboard focus regression
Dominik Csapak [Mon, 24 Jun 2024 10:25:52 +0000 (12:25 +0200)]
widget: data table: fix keyboard focus regression

our recent change from `cell_class` to `cell_configuration` broke
keyboard navigation for tables, since the `tabindex` (among others)
attribute was missing on the cells.

To fix this, write a method to add attributes from other attributes, for
the WidgetStdProps, and use that for the cell_configuration instead of
overwriting the existing ones.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agocss: fix typo in class name
Dominik Csapak [Fri, 21 Jun 2024 12:20:07 +0000 (14:20 +0200)]
css: fix typo in class name

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agosass: change from 'sass' binary to 'rust-grass' in trunk config
Dominik Csapak [Fri, 21 Jun 2024 12:20:06 +0000 (14:20 +0200)]
sass: change from 'sass' binary to 'rust-grass' in trunk config

and in the README, since we now have it packaged

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: container: add 'from_tag' shorthand
Dominik Csapak [Fri, 21 Jun 2024 12:20:05 +0000 (14:20 +0200)]
widget: container: add 'from_tag' shorthand

instead of doing `Container::new().tag(<tag>)` we can now do
`Container::from_tag(<tag>)` saving us some lines

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: container: fix typo in method
Dominik Csapak [Fri, 21 Jun 2024 12:20:04 +0000 (14:20 +0200)]
widget: container: fix typo in method

it should be 'from_widget_props' not 'form_widget_props' since it has
nothing to do with forms, but creates a new instance *from* widget_props

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: container: improve documentation
Dominik Csapak [Fri, 21 Jun 2024 12:20:03 +0000 (14:20 +0200)]
widget: container: improve documentation

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agotree wide: adapt to new margin/padding system
Dominik Csapak [Fri, 21 Jun 2024 12:20:01 +0000 (14:20 +0200)]
tree wide: adapt to new margin/padding system

by
* replacing hardcoded padding/margin classes with the builder equivalent
* for indentation we can now simply use multiplication, so we have e.g.
  one element for indent level 2 with double the padding instead of
  two elements with one level of padding each
* the inputpanel now uses the 'set_style' method instead of extracting
  and inserting the style attribute manually

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: action icon: implement padding/margin/style builder
Dominik Csapak [Fri, 21 Jun 2024 12:20:00 +0000 (14:20 +0200)]
widget: action icon: implement padding/margin/style builder

so one can use padding/margin/style/etc. builder methods on it

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: data table: replace 'cell_class' with 'cell_configuration'
Dominik Csapak [Fri, 21 Jun 2024 12:19:59 +0000 (14:19 +0200)]
widget: data table: replace 'cell_class' with 'cell_configuration'

instead of only allowing to set the classes of cells, we create a new
`CellConfiguration` struct that holds classes, styles, and attributes
which can be configured for the data table cells

this allows us to use the builder style patterns for cells instead
of using hardcoded classes

This also integrates the attributes from the `DataTableCellRenderArgs`
so all of the cell html config is one place

This also adds a 'set_style' method on the `DataTableCellRenderArgs`

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoprops: padding: implement new css variable based system
Dominik Csapak [Fri, 21 Jun 2024 12:19:58 +0000 (14:19 +0200)]
props: padding: implement new css variable based system

identically to margin, use CSS variables to determine the padding level,
instead of hardcoding some levels in sass/scss.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoprops: margin: implement new css variable based system
Dominik Csapak [Fri, 21 Jun 2024 12:19:57 +0000 (14:19 +0200)]
props: margin: implement new css variable based system

instead of relying on the sass to generate a few hardcoded
classes for consistent padding, have one class in css (for each
side/axis) and use a css variable for the factor to multiply

advantages are that we now have 'unlimited' margin levels
but depends on css variables.

for that to work, we now require the struct to also implement
`AsCssStylesMut` so we can set the variable value in the style directly

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dialog: silence dead code warning
Dominik Csapak [Thu, 20 Jun 2024 12:00:57 +0000 (14:00 +0200)]
widget: dialog: silence dead code warning

we never access the elements, but we need to keep them, otherwise the
our event handlers will not be called

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoadd WidgetStyleBuilder to prelude
Dominik Csapak [Thu, 20 Jun 2024 09:01:17 +0000 (11:01 +0200)]
add WidgetStyleBuilder to prelude

and remove the now unnecessary use statements from the code

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: navigation drawer: fix overflow classes
Dominik Csapak [Wed, 19 Jun 2024 08:10:40 +0000 (10:10 +0200)]
widget: navigation drawer: fix overflow classes

so that we can have scrolling on the y axis, but have hidden overflow on
the x axis.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidgets: use WidgetStyleBuilder
Dominik Csapak [Thu, 20 Jun 2024 07:18:34 +0000 (09:18 +0200)]
widgets: use WidgetStyleBuilder

replaces use of setting the 'style' attribute manually with
using the 'style'/'width'/etc. methods of WidgetStyleBuilder

The changes are mostly straight-forward, except for the split-pane, but
there should still be no semantic change.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: fa: implement padding/margin/style builder traits
Dominik Csapak [Thu, 20 Jun 2024 07:18:33 +0000 (09:18 +0200)]
widget: fa: implement padding/margin/style builder traits

so that users can add those things directly

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: datatable: implement AsCssStylesMut
Dominik Csapak [Thu, 20 Jun 2024 07:18:32 +0000 (09:18 +0200)]
widget: datatable: implement AsCssStylesMut

so we can set styles on the table

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: dialog: use CssStyles for style and implement WidgetStyleBuilder
Dominik Csapak [Thu, 20 Jun 2024 07:18:31 +0000 (09:18 +0200)]
widget: dialog: use CssStyles for style and implement WidgetStyleBuilder

so we can easily use the 'style'/'width'/etc. builder methods for it
adapt the call sites of dialog to use the new builder methods since
the old 'style' method does not work anymore.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agowidget: navigation drawer: implement WidgetStyleBuilder
Dominik Csapak [Thu, 20 Jun 2024 07:18:30 +0000 (09:18 +0200)]
widget: navigation drawer: implement WidgetStyleBuilder

so that users can directly add styles to the drawer

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agopwt-macros: automatically implement WidgetStyleBuilder for elements
Dominik Csapak [Thu, 20 Jun 2024 07:18:29 +0000 (09:18 +0200)]
pwt-macros: automatically implement WidgetStyleBuilder for elements

since we have the style property in the std_props already

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoprops: add WidgetStyleBuilder trait
Dominik Csapak [Thu, 20 Jun 2024 07:18:28 +0000 (09:18 +0200)]
props: add WidgetStyleBuilder trait

for having 'style' and 'set_style' functions on components that have
a WidgetBuilder already, makes it easier to set the style of
components, so instead of writing:

```
Component::new()
    .attribute("style", "style1: value1; style2: value2")
```

one can now do

```
Component::new()
    .style("style1", "value1")
    .style("style2", "value2")
```

making it much more obvious what is happening and easier if setting
multiple styles.

This also adds a shorthand for width and height, with a custom
CssLength enum that represents different css length units
and defaults to px if only a number is given

The CssStyles struct is there to hold the styles and generate the final
attribute string to use in components.

It implements a From trait for AsRef<str>, but that implmenetation is
not fully html/css spec conform as it leaves out some unused syntax.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agowidget: datatable: clippy: convert `loop` to `while let`
Dominik Csapak [Tue, 18 Jun 2024 08:46:57 +0000 (10:46 +0200)]
widget: datatable: clippy: convert `loop` to `while let`

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agowidget: return `Row` from (error_)message instead of Html
Dominik Csapak [Tue, 18 Jun 2024 08:46:56 +0000 (10:46 +0200)]
widget: return `Row` from (error_)message instead of Html

with `Row` we are much more flexible, e.g. we can use all
builder style functions for classes/padding/margin/etc. and the only
downside is that sometimes we have to do an `.into()` to convert to Html

And even that is not always necessary since arguments of functions often
take something like: `Into<Html>` which `Row` implements.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agowidget: form field: add range shorthand
Dominik Csapak [Tue, 18 Jun 2024 08:46:55 +0000 (10:46 +0200)]
widget: form field: add range shorthand

for creating a range input with minimum/maxmium/step

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agowidget: data table: disable last enabled column
Dominik Csapak [Tue, 18 Jun 2024 08:46:54 +0000 (10:46 +0200)]
widget: data table: disable last enabled column

when deselecting columns, we don't want the user to deselect the last
one, since it's not possible to show a menu anymore to reselect any
column.

the only exception currently is when the column has the menu disabled.
we probably don't want to count such columns as 'active' for selection
purposes, but we currently don't have that information here.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agowidget: mini scroll: simply scroll code for mouse scrolling
Dominik Csapak [Tue, 18 Jun 2024 08:46:53 +0000 (10:46 +0200)]
widget: mini scroll: simply scroll code for mouse scrolling

instead of trying to always have 10 scroll steps for the whole area,
simply scroll the amount the browser gives us, just horizontally instead
of vertically. This gives a more 'native' feel for the scrolling
behavior, regardless if there is a large or small scroll area.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agostate: tree store: optimize unfiltered case
Dominik Csapak [Tue, 18 Jun 2024 08:46:52 +0000 (10:46 +0200)]
state: tree store: optimize unfiltered case

in case there is no filter, we don't need to iterate over all children
and check the filter, just copy it

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 months agotree wide: use `swap_remove` explicitly instead
Shannon Sterz [Fri, 14 Jun 2024 07:59:38 +0000 (09:59 +0200)]
tree wide: use `swap_remove` explicitly instead

this should work the same as the previously used `remove` function,
but `remove` is now deprecated.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
7 months agoFormContextState: remove unnecessary clone
Shannon Sterz [Fri, 14 Jun 2024 07:59:37 +0000 (09:59 +0200)]
FormContextState: remove unnecessary clone

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
10 months agoFileButton: add note
Dietmar Maurer [Mon, 4 Mar 2024 09:06:32 +0000 (10:06 +0100)]
FileButton: add note

10 months agoFileButton : suppress cancel (avoid dialog close)
Dietmar Maurer [Mon, 4 Mar 2024 08:46:34 +0000 (09:46 +0100)]
FileButton : suppress cancel (avoid dialog close)

10 months agoFileButton: new widget (wrapper for input type file)
Dietmar Maurer [Fri, 1 Mar 2024 11:24:05 +0000 (12:24 +0100)]
FileButton: new widget (wrapper for input type file)

10 months agoButton: remove placeholder property
Dietmar Maurer [Fri, 1 Mar 2024 10:10:09 +0000 (11:10 +0100)]
Button: remove placeholder property

10 months agoMenuButton: cleanup code, only generate menu when visible
Dietmar Maurer [Wed, 28 Feb 2024 12:31:07 +0000 (13:31 +0100)]
MenuButton: cleanup code, only generate menu when visible

10 months agoTooltip: cleanup
Dietmar Maurer [Wed, 28 Feb 2024 12:15:01 +0000 (13:15 +0100)]
Tooltip: cleanup

10 months agoMenuButton: fix layout problems
Dietmar Maurer [Wed, 28 Feb 2024 10:42:01 +0000 (11:42 +0100)]
MenuButton: fix layout problems

10 months agoActionIcon: use builder macro
Dietmar Maurer [Mon, 26 Feb 2024 12:04:11 +0000 (13:04 +0100)]
ActionIcon: use builder macro

10 months agoTooltip: avoid additional container
Dietmar Maurer [Mon, 26 Feb 2024 08:56:11 +0000 (09:56 +0100)]
Tooltip: avoid additional container

10 months agore-format code using rustfmt
Dietmar Maurer [Wed, 21 Feb 2024 09:00:06 +0000 (10:00 +0100)]
re-format code using rustfmt

11 months agoGridPicker: do not call on_select when nothing is selected.
Dietmar Maurer [Fri, 2 Feb 2024 12:02:48 +0000 (13:02 +0100)]
GridPicker: do not call on_select when nothing is selected.

Important if we have a filter.

11 months agoNumbetr: fix step up/down for unsigned integers
Dietmar Maurer [Fri, 2 Feb 2024 10:30:03 +0000 (11:30 +0100)]
Numbetr: fix step up/down for unsigned integers

11 months agoGridPicker: use selection to listen for changes
Dietmar Maurer [Thu, 1 Feb 2024 10:55:20 +0000 (11:55 +0100)]
GridPicker: use selection to listen for changes

11 months agoDataTable: ignore autoselect flag inside Msg::ItemClick
Dietmar Maurer [Thu, 1 Feb 2024 10:53:31 +0000 (11:53 +0100)]
DataTable: ignore autoselect flag inside Msg::ItemClick

We always want to select items with single click.

11 months agoBoolean: fix disabled flag
Dietmar Maurer [Wed, 31 Jan 2024 12:21:52 +0000 (13:21 +0100)]
Boolean: fix disabled flag

11 months agoimprove docs
Dietmar Maurer [Tue, 30 Jan 2024 11:30:58 +0000 (12:30 +0100)]
improve docs

11 months agoCheckbox: implement validation
Dietmar Maurer [Tue, 30 Jan 2024 10:38:40 +0000 (11:38 +0100)]
Checkbox: implement validation

11 months agoBoolean: implement validation
Dietmar Maurer [Tue, 30 Jan 2024 09:52:58 +0000 (10:52 +0100)]
Boolean: implement validation

11 months agoTooltip: remove useless class assignments
Dietmar Maurer [Tue, 30 Jan 2024 09:49:35 +0000 (10:49 +0100)]
Tooltip: remove useless class assignments

12 months agoallow using latest indexmap
Dietmar Maurer [Wed, 27 Dec 2023 11:30:51 +0000 (12:30 +0100)]
allow using latest indexmap

13 months agotooltip: fix wrong html generation
Dominik Csapak [Wed, 20 Dec 2023 12:27:07 +0000 (13:27 +0100)]
tooltip: fix wrong html generation

it seems the keys here are not enough for yew to determine which item is
which, but changing to a container with an 'optional_child' is, so
change to that

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
13 months agodon't update the MenuPopper when the to aligned item is not shown
Dominik Csapak [Wed, 20 Dec 2023 11:34:27 +0000 (12:34 +0100)]
don't update the MenuPopper when the to aligned item is not shown

otherwise we call it unnecessarily

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>