Avaiga / taipy

Turns Data and AI algorithms into production-ready web applications in no time.
https://www.taipy.io
Apache License 2.0
15.34k stars 1.87k forks source link

Allow a Stylekit "card" to be side-by-side with width=fit-content #1780

Closed arcanaxion closed 1 day ago

arcanaxion commented 1 month ago

Description

Cards can have their width match the size of its content with #468, which is great for displaying metrics (among other things).

I'd like to position cards side-by-side, without needing to use a layout and explicitly defining the width of each element there.

Currently, I can use a layout and define the width:

from taipy.gui import Gui, Markdown

page_md_target = Markdown(
"""
<|layout|columns=10em 10em|

<|card|part|width=fit-content|
Metric 1
|>

<|card|part|width=fit-content|
Metric 2
|>

|>
""")

if __name__ == "__main__":
    gui = Gui(page_md_target)
    gui.run(debug=True, run_browser=False, use_reloader=True, dark_mode=False)

Which produces:

image

I want to create this without defining a width anywhere.

Solution Proposed

Maybe allowing a layout column to "fit-content" ("fc") is a possible solution? I don't like the extra nesting especially if I'm only showing 2 cards, but it makes sense and I can also use layout.gap to add space between the cards.

page_md_layout = Markdown(
"""
<|layout|columns=fc fc|

<|card|part|width=fit-content|
Metric 1
|>

<|card|part|width=fit-content|
Metric 2
|>

|>
""")

Impact of Solution

Needs to work with taipy.gui.builder / tgb also.

Additional Context

No response

Acceptance Criteria

Code of Conduct

arcanaxion commented 1 month ago

@dinhlongviolin1 Opened a new feature request per #1725. Thanks for taking a look!

HatimZ commented 1 month ago

@arcanaxion @jrobinAV I am interested in this issue. Can you please assign this to me? I think I would need to look deep down into the Markdown module and how it translates string into actual GUI code. Then i would check for "fc" string and apply styles for width 100% to each child, so they can expand in their axis

jrobinAV commented 1 month ago

Hello @HatimZ ,

Yep, sure. Let me assign it to you. If you have any questions, @FredLL-Avaiga @dinhlongviolin1 @namnguyen20999 @FabienLelaquais will be pleased to answer.

HatimZ commented 1 month ago

ok great.

quest-bot[bot] commented 1 month ago

New Quest! image New Quest!

A new Quest has been launched in @Avaiga’s repo. Merge a PR that solves this issue to loot the Quest and earn your reward.


Some loot has been stashed in this issue to reward the solver!

🗡 Comment @quest-bot embark to check-in for this Quest and start solving the issue. Other solvers will be notified!

⚔️ When you submit a PR, comment @quest-bot loot #1780 to link your PR to this Quest.

Questions? Check out the docs.

xyfer17 commented 1 month ago

@arcanaxion could please assign the above issue to me, if @HatimZ is not working on it.

HatimZ commented 1 month ago

@arcanaxion Will work on this issue. Just caught up with some work. Updates soon

HatimZ commented 4 weeks ago

@quest-bot embark

quest-bot[bot] commented 4 weeks ago

@HatimZ has embarked on their Quest. 🗡

This is not an assignment to the issue. Please check the repo’s contribution guidelines before submitting a PR.

Questions? Check out the docs.

quest-bot[bot] commented 4 weeks ago

🧚 @HatimZ has submitted PR https://github.com/Avaiga/taipy/issues/2039 and is claiming the loot.

Keep up the pace, or you'll be left in the shadows.

Questions? Check out the docs.

github-actions[bot] commented 1 week ago

This issue has been labelled as "🥶Waiting for contributor" because it has been inactive for more than 14 days. If you would like to continue working on this issue, please add another comment or create a PR that links to this issue. If a PR has already been created which refers to this issue, then you should explicitly mention this issue in the relevant PR. Otherwise, you will be unassigned in 14 days. For more information please refer to the contributing guidelines.

RymMichaut commented 2 days ago

Congrats @HatimZ please contact me at rym.michaut@taipy.io to ship your swag :)

FredLL-Avaiga commented 2 days ago

This should be enough for your case @arcanaxion

from taipy.gui import Gui

page = """
<|layout|columns=max-content max-content|

<|card|part|
Metric 1
|>

<|card|part|
Metric 2
|>

|>
"""

if __name__ == "__main__":
    Gui(page).run(title="layout - fit content")

image

What do you think ?

arcanaxion commented 2 days ago

@FredLL-Avaiga Yes that's perfect. Time for me to do some reading on CSS... Thanks Fred!

FredLL-Avaiga commented 1 day ago

:+1 can you close the issue then?