-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(ui-containers): Use display: contents
#3957
Conversation
Allows children of `conditionPanel()` and `uiOutput()` to automatically participate in the grid/flex layout of the parent container.
|
||
/* Conditional panels and uiOutput */ | ||
[data-display-if], | ||
div:where(.shiny-html-output) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you think of any scenarios this might break existing apps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First and most obvious: this would break apps where users were directly styling the conditionalPanel()
or uiOutput()
container using selectors that target our the emitted markup directly. It's hard to know in advance how those apps would be broken.
In most other cases, I believe setting display: contents
is much closer to what users are expecting happens with the children of the conditional panel or UI outputs. In particular that it's much closer to adding the children directly into the layout.
The original issue in posit-dev/py-shiny#881 is a good example that it's not obvious that both approaches add intermediate containers. Outside of flex/grid layouts the impact of the layout container is minimal, but there's greater impact now that we're using both flex and grid more often.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It turns out our shiny application statnetWeb is one of those that breaks with this change.
As the current maintainer, and someone not well versed in this syntax, can you pls tell me if there is a straightforward change to the 2 example code chunks below that will update to the new shiny
syntax required:
conditionalPanel(condition = 'input.filetype < 5',
column(6,
br(),
fileInput(inputId='rawdatafile', label=NULL, accept='text'),
verbatimTextOutput('rawdatafile'))
)
conditionalPanel(condition='input.filetype == 3',
column(6,
uiOutput('pajchooser'))),
Many thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @martinamorris, could you please open a new issue? It'd be helpful if you could describe a bit more how the app has broken and how we could reproduce the issue. It's possible that your issue is related to the change in this PR, but it could also be something else -- this PR didn't involve any syntax changes to conditionalPanel()
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will do, thx. The break occurred with the 1.8.1 CRAN update, and affects the page rendering for pages constructed with conditionalPanel
. I followed the link from your 1.8.1 release tag to this commit, but this may not be the culprit.
Will show how I reproduced the issue, with some screenshots.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done: #4099
With this change merged, I can no longer use this workaround, can I? |
@ismirsehregal from what I can tell, the workaround offered in that issue still works? Are you encountering a different issue? |
@cpsievert I came to the same conclusion -- but while looking at the reprex I started think we should initially hide the contents of a |
@cpsievert thanks for the feedback. I just read the NEWS:
and thought it might affect the above mentioned "workaround" which I'm still using every now and then. |
Allows children of
conditionPanel()
anduiOutput()
to automatically participate in the grid/flex layout of the parent container.For
uiOutput()
we usediv:where(.shiny-html-output)
, for two reasons:inline = FALSE
or adiv()
container is used.:where()
ensures that users can use.shiny-html-output
without fighting our rule.For posit-dev/py-shiny#881