-
Notifications
You must be signed in to change notification settings - Fork 15
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
Problem importing raw css into ShadowDom #39
Comments
Can you share how are you using the component?
Also I would test this in the final build mode because I'm not sure it is supported |
Here is how I use it: [<LitElement("ol-map")>]
let OlMap () =
Hook.useHmr hmr
let this, props =
LitElement.init (fun cfg ->
cfg.useShadowDom <- true
cfg.props <-
{|
map = Prop.Of(Map.map [], attribute = "map")
|}
cfg.styles <- [
css $"{olCss}"
// unsafeCSS olCss
css $"""
.map {{
width: 100%%;
height: 80vh;
background: #a2e7ff;
}}"""
])
Hook.useEffect (fun () ->
if isNull this.shadowRoot |> not then
let target = getShadowElementById this "map"
props.map.Value.setTarget target
)
html $"""<div id="map" class="map"></div>""" When you say final build mode, you mean the output of |
Lit has a restriction that styles must be statically declared with the The error is misleading, it seems we're missing a Promise.catch here to show the actual error: Fable.Lit/src/Lit/LitElement.fs Lines 246 to 247 in 82c3286
|
What is then the correct way of getting a css package into a (shadowed) component? I'm interfacing OpenLayers to Fable (I'll release the package in due time), and OpenLayers comes with a bunch of css, and it would be nice (but not strictly necessary) to contain it in the Lit component. |
One thing that the shadow DOM has is that it was not designed to work with global styles so this tends to create a lot of friction when you try to integrate with third party style libraries. The simplest and fastest workaround would be to just not use shadow DOM if you depend heavily on third party css or while not optimal but doable you can add a style/link tag inside your shadow DOM component and it should work properly but for completeness the ideal thing though would be to use css import assertions // please note that Fable doesn't have an out of the box
// way to import css/json assertions so you need to create
// cssImport manually somehow
let styles: obj = cssImport "dependency.css"
// inside the config function
cfg.styles <- [ css $".my-local-style {{ display: flex }}"; unbox styles] That being said I made a project which hasn't been updated in a while that covers this use case it's called Fable.ShadowStyles and you can see me hacking my way around thanks to vite here and using them here |
Thank you for your suggestions @AngelMunoz! |
Importing verbatim css from an external source into a
LitConfig.styles
element does not work:This compiles just fine, but crashes at runtime:
As a workaround, this works:
Otherwise Fable.Lit is awesome!
The text was updated successfully, but these errors were encountered: