04:40:01 RRSAgent has joined #decl-partial-updates 04:40:05 logging to https://www.w3.org/2025/11/12-decl-partial-updates-irc 04:40:05 RRSAgent, do not leave 04:40:06 RRSAgent, this meeting spans midnight 04:40:06 RRSAgent, make logs public 04:40:08 Meeting: Declarative Partial Updates - Customizing navigation experience 04:40:08 Chair: Noam Rosenthal 04:40:08 Agenda: https://github.com/w3c/tpac2025-breakouts/issues/66 04:40:08 Zakim has joined #decl-partial-updates 04:40:09 Zakim, clear agenda 04:40:09 agenda cleared 04:40:09 Zakim, agenda+ Pick a scribe 04:40:10 agendum 1 added 04:40:10 Zakim, agenda+ Reminders: code of conduct, health policies, recorded session policy 04:40:10 agendum 2 added 04:40:10 Zakim, agenda+ Goal of this session 04:40:11 agendum 3 added 04:40:11 Zakim, agenda+ Discussion 04:40:11 agendum 4 added 04:40:12 Zakim, agenda+ Next steps / where discussion continues 04:40:13 agendum 5 added 04:40:13 Zakim, agenda+ Adjourn / Use IRC command: Zakim, end meeting 04:40:13 agendum 6 added 04:40:13 breakout-bot has left #decl-partial-updates 05:14:39 breakout-bot has joined #decl-partial-updates 05:14:41 RRSAgent, do not leave 05:14:41 RRSAgent, this meeting spans midnight 05:14:42 RRSAgent, make logs public 05:14:43 Meeting: Declarative Partial Updates - Customizing navigation experience 05:14:43 Chair: Noam Rosenthal 05:14:43 Agenda: https://github.com/w3c/tpac2025-breakouts/issues/66 05:14:43 Zakim, clear agenda 05:14:43 agenda cleared 05:14:43 Zakim, agenda+ Pick a scribe 05:14:44 agendum 1 added 05:14:45 Zakim, agenda+ Reminders: code of conduct, health policies, recorded session policy 05:14:45 agendum 2 added 05:14:45 Zakim, agenda+ Goal of this session 05:14:46 agendum 3 added 05:14:46 Zakim, agenda+ Discussion 05:14:46 agendum 4 added 05:14:46 Zakim, agenda+ Next steps / where discussion continues 05:14:47 agendum 5 added 05:14:48 Zakim, agenda+ Adjourn / Use IRC command: Zakim, end meeting 05:14:48 agendum 6 added 05:14:48 breakout-bot has left #decl-partial-updates 05:21:42 oriol has joined #decl-partial-updates 05:37:28 kbabbitt has joined #decl-partial-updates 05:38:14 wendyreid has joined #decl-partial-updates 05:38:19 present+ 05:40:20 LeoLee has joined #decl-partial-updates 05:41:07 masonf has joined #decl-partial-updates 05:41:38 present+ 05:42:01 present+ 05:42:03 Mek has joined #decl-partial-updates 05:42:04 frehner has joined #decl-partial-updates 05:42:04 JakeA has joined #decl-partial-updates 05:42:07 ydaniv has joined #decl-partial-updates 05:42:08 guohuideng has joined #decl-partial-updates 05:42:19 Zakim, start meeting 05:42:20 RRSAgent, make logs Public 05:42:22 please title this meeting ("meeting: ..."), masonf 05:42:22 jcayzac has joined #decl-partial-updates 05:42:29 meeting: declarative partial updates 05:42:34 TabAtkins has joined #decl-partial-updates 05:42:34 emilio has joined #decl-partial-updates 05:42:40 present+ 05:42:40 present+ 05:42:44 present+ 05:42:45 present+ 05:42:50 mmocny has joined #decl-partial-updates 05:42:54 present+ 05:42:59 berlysia has joined #decl-partial-updates 05:43:14 dmurph has joined #decl-partial-updates 05:43:34 tantek-projector has joined #decl-partial-updates 05:43:54 present+ 05:44:02 present+ 05:44:31 sisidovski has joined #decl-partial-updates 05:45:06 kizu has joined #decl-partial-updates 05:45:11 present+ 05:45:27 theparkagen has joined #decl-partial-updates 05:45:31 present+ 05:45:52 present+ 05:45:53 zcorpan has joined #decl-partial-updates 05:45:55 YY has joined #decl-partial-updates 05:46:24 hsivonen has joined #decl-partial-updates 05:46:45 present+ 05:47:08 Jayson has joined #decl-partial-updates 05:47:10 NoamR: Discussing Declarative Partial Updates 05:47:10 lea has joined #decl-partial-updates 05:47:14 nidhi has joined #decl-partial-updates 05:47:17 ... we can bikeshed the name. 05:47:18 scribe+ mmocny 05:47:23 camille has joined #decl-partial-updates 05:47:26 ... collection of a few different things with a common name 05:47:35 ... common purpose 05:47:41 JRJurman has joined #decl-partial-updates 05:47:42 ... but they work on their own without the rest 05:47:56 ... individually useful, but work nicely when combined 05:48:11 ... I will go over all of it in breadth first, shallow, then in depth with questions from the room 05:48:36 ... (joke about photo) 05:48:39 KeitaSuzuki has joined #decl-partial-updates 05:48:50 ... this is about the navigation experience on the web 05:49:07 ... make it feel like moving between pages or states, whatever that means, make sure it is fast and smooth and customizable 05:49:13 ... i.e. brand, creativity 05:49:29 ... fast and smooth sometimes are at odds with each other 05:49:54 ... in the last year, most of the features are "defer" or "later" all these things... render blocking... everything later, but want things to be fast... and smooth 05:50:06 ... animations are smooth but by definition slower than instant 05:50:17 ... third part is customizability for authors 05:50:33 ... a design principle for this: declarative is key 05:50:51 ... that word can be overloaded with many meanings. Ours is: less event-driven javascript that you have to use in real time 05:51:20 ... declarative doesn't mean no JS, it might be useful to use script to define a set of rules-- but shouldnt be needed in real time 05:51:53 ... declarative by that definition-- we have less jank, less bundle size, less lifecycle errors (than script), ... and more opportunties for browser optimizations 05:52:05 tomayac has joined #decl-partial-updates 05:52:11 ... We have 3 meta-features: 05:52:21 ... Updating the DOM 05:52:22 Present+ Thomas_Steiner 05:52:43 ... there are low level primitives right now, one fragment at a time, or stream into the main document response 05:53:14 ... but when you start wanting to update the document, you cannot stream... now you have to write scripts in real time for every change in the DOM... this is the role of frameworks much of the time... respond to event and make updates to dom 05:53:23 ... two solutions : out-of-order streaming , and stream to element 05:53:30 sisidovski has joined #decl-partial-updates 05:53:31 ... 2: Gestures 05:54:14 ... Right now supported gestures are scrolling and clicking (this is a gesture), most interfaces are just this-- but native counterparts have a lot more gestures, more swiping (dismiss, refresh, etc) 05:54:22 swipe left, swipe right 05:54:31 RRSAgent draft minutes 05:54:45 ... today uou have to use libraries that deal with tyouch events, and this is difficult 05:54:53 rrsagent, please draft minutes 05:54:54 I have made the request to generate https://www.w3.org/2025/11/12-decl-partial-updates-minutes.html wendyreid 05:55:01 ... need to use position sticky and multuiple scroller elements 05:55:16 rrsagent, make logs public 05:55:18 ... with native gestures, you perform actions, like swipe to dismiss 05:55:33 ... (snap-to-activate) 05:55:49 ... another value of declarative is (main thread congestion) 05:56:14 ... I come to this from web perforamnce, and there is a lot of congestion on the main thread, and a lot of the value of this work is to be able to delegate, content templating to a worker or server 05:56:33 ... and gestures to a compositor, and things browsers can parallelize, without having to make js threads 05:56:44 ... Stream to element: being able to drive UI updates from server or worker 05:57:24 ... From a server it is very common from frameworks, like React, renderToStream. Takes a react tree that isn't ready and puts in placeholders. Same is marko. Others that dont have this have open issues for it (like Nuxt) 05:57:36 ... Other UIs are very dynamic, i.e. chat-style 05:57:52 ... these are served as-they-come and can be out of order 05:57:58 ... (showcase code example) 05:58:37 ... Stream html to shadow root, unsafe version is to trust the source, then example of how to use it (piping) 05:58:50 q? 05:58:50 ... From that moment on, the html goes from response to element 05:59:12 ... You can do whatever you want in that stream, no oppinions 05:59:28 ... Out of Order streaming 05:59:41 ... (another example): serving content when it is ready 06:00:02 ... example, select box with a list of countries. Often start with loading... and then you fill the list with a slow library to get a list 06:00:16 ... (example shows template element that will replace children) 06:00:31 ... Will replace things in the order they become ready from server 06:00:50 ... Overscroll Gestures: reveal/conceal elements 06:01:07 ... examples from bluesky. Today they have this in native and not in the PWA, because it was hard. And sad. 06:01:26 ... (Example, but this one is less advanced in terms of spec discussions, so this is WIP) 06:01:37 ... Example drawer-menu and overscroll area 06:01:51 ... so the menu is a think on top of the container 06:02:05 ... Will discuss more in the CSS WG on Friday morning 06:02:24 ... Snap to Activate: gestures as progressive enhancements from clicking 06:02:42 ... often you would have a button that does the same things 06:03:01 ... accessibility guidelines say to have a button, but gestures enhance the experience 06:03:18 ... when you scroll snap to a place, you will actually click something 06:04:01 ... initial ARIA conversations: if we do it right, could also connect this to screen readers.. i.e. if you scroll left/up you will show menu or reload... so you finally get semantics vs what you have today with manual handlers and actions 06:04:34 ... also: predictive things, since we know where you are going or might go, we can predictively load new content for example, or reveal a tab in a list of tabs, start streams 06:04:57 ... this is not designed at all, but it is a progressive enhancement 06:05:12 ... create a relationship between items, snap --> click 06:05:24 CSS Route Matching: style based on document URL 06:05:51 ... apologies this is so broad-- partially this is just to give you FYI so you can followup in the repo 06:06:19 ydaniv has joined #decl-partial-updates 06:06:26 ... This is about styling the navigation experience. A year ago we released cross-document view transitions, declaratively between pages 06:06:42 ... but we found that in order to make it custmizable you really need to know where you are coming from AND going to 06:07:10 ... in order to do this, currently you need to intercept the events on both sides, the url you are coming from and to and make custom decisions -- not very declarative 06:07:31 ... recently on bluesky someone said that using cross document VTs is like flying without a direction 06:07:44 ... it is too hard... we will talk more about this on Friday 06:08:01 ... (example of css route matching) where from / at / to 06:08:27 ... e.g. going from movie list to movie details, it will... expand-thumb-to-hero 06:08:48 ... lets you Express this where it belongs. 06:09:00 ... preview before commit: And allowing you to customize this with script. 06:09:08 ... lets you show an exit thing 06:09:17 ... This is not declarative but it is customizable 06:09:38 ... if we are not ready to render yet, will show a same-document navigation of a preview, and then switch to cross document 06:09:53 ... or we could make it declarative if a navigation prefers... 06:09:59 q? 06:09:59 q+ 06:09:59 ... we are done! lets get to the queue 06:10:00 q+ 06:10:03 q+ 06:10:05 q+ 06:10:05 q+ to say auto-clicking on scroll snap defined in css could be sec-sensitive 06:10:10 q? 06:10:16 ack Jake 06:10:42 JakeA: if you create two writeables at the same time, will they be racy? 06:10:49 q+ 06:11:02 Noam: Yes! we thought about it then said lets try it its easier 06:11:07 JakeA: Q about example 06:11:11 NoamR: it was wrong... 06:11:17 JakeR: innerHTML question 06:11:23 q+ 06:11:56 NoamR: by default it would not expand template, because that would interfere with existing sanitizers, but when you stream append for example with patches, then it would apply 06:12:12 JakeR: in the scope of entire document? 06:12:15 NoamR: No wherever it applies to, parent of the template 06:12:18 shared anscestor? 06:12:55 JakeR: will this encourage updates anywhere in document, get writable for the whole body? 06:13:07 Philip: might have a mode that only does append, but dont have that... 06:13:33 NoamR: They dont interfere with each other because they have a separate parser, but appending to dom could interleave ... 06:14:00 JakeR: (asking about the example, nuanced question) 06:14:07 matatk has joined #decl-partial-updates 06:14:07 q- 06:14:13 present+ 06:14:15 ack jcayzac 06:14:25 jcayzac: 06:14:58 s/missed the q/is there a declarative way to use streamHTMLUnsafe 06:14:59 NoamR: Yes eventually, but this is first step, HTMX was inspiration, but we want to be careful about not being oppinionated. HTMX can be oppinionated-- and that is okay for a framework 06:15:02 (or at least that's what I heard) 06:15:31 NoamR: if there will become value to layer oppinions on top of primitives we can evaluate, but want to start with less script/events needed first 06:15:34 domfarolino has joined #decl-partial-updates 06:15:47 ack dmurph 06:16:11 dmurph: this is cool, I like it. We spent time on the previous page, document to navigate, scoped to PWAs... 06:16:35 dmurph: link capturing, navigation capturing now, destination can declare and intercept, handle in a more interesting way 06:17:01 dmurph: right now the most advanced thing is focus my tab-- but now we could do navigate api... im interested in this! 06:17:13 NoamR: Is this just navigation api? 06:17:27 q+ 06:17:32 dmurph: its more, i.e. clicking a link to a calendar to figma, and normally open window, but now you can switch to window in document 06:17:47 dmurph: (asking about example of worker/sw) 06:18:07 NoamR: I would summarize all of this as integrating this proposal/parts with the navigation api 06:18:15 NoamR: Lets chat later! 06:18:19 ack kbabbitt 06:18:26 kbabbitt: I also love it 06:19:06 kbabbitt: Wondering about making more declaraitve-- reminds me of (?) svg, and building skeleton and then piping to text decoder and pipe to element 06:19:35 wanderview has joined #decl-partial-updates 06:19:35 NoamR: Discussions about templating, dom parts, things going on in parallel-- but felt like we should go one step at a time-- lets enable a primitive for streaming first 06:19:39 q? 06:19:44 q+ 06:19:59 NoamR: No need for detached document streaming that has lots of constraints. Once the dust settles we can return to it next. 06:20:08 ack zcorpan 06:20:08 zcorpan, you wanted to say auto-clicking on scroll snap defined in css could be sec-sensitive 06:20:12 s/(?) svg/svg filter declaration/ 06:20:34 zcorpan: Scroll-snap-to-activate idea, seems like a new idea added to css, trusted clicks might be security sensitive 06:20:54 zcorpan: today might allow untrusted css, which might allow css-providers to cause trusted clicks that aren't expected 06:21:13 jridgewell has joined #decl-partial-updates 06:21:16 NoamR: it sort of can already do that by putting UI on top of buttons... css can already make you do things (by convincing details) 06:21:26 NoamR: the other part of this is, its just a proposal for now 06:21:30 zcorpan: just noting 06:22:09 q? 06:22:09 ??: Related to that scrolling doesn't count as transient user activation and now it will trigger this based on what the user would previously consider a scroll 06:22:13 ack wendyreid 06:22:15 zcorpan has joined #decl-partial-updates 06:22:47 wendyreid: soudns really cool. Some more to consider: interaction with the screen reader and concerns about dynamic content and not updating accessibility tree quickly (its janky often today already). 06:22:56 q+ 06:23:04 wendyreid: overscroll concerns, single pointer gesture... cannot rely on swiping as the only way to do things 06:23:08 chikamune has joined #decl-partial-updates 06:23:17 wendyreid: how would we commicate that to screen readers and other AT's 06:23:39 wendyreid: the idea of more gestures to the web presents some opprortunity for "reduces gestures" akin to reduced motion? 06:23:56 wendyreid: ...there is a lot. But its really cool. 06:24:15 Bas: what do Native apis do for this? 06:24:30 shisama has joined #decl-partial-updates 06:24:44 wendyreid: their are some control for not accepting or reducing gestures, and when you use AT's the gestures are taken out automatically. 06:24:52 Bas: is the content author responsible? 06:25:04 ack lea 06:25:05 wendyreid: you need to not override defaults (?) 06:25:31 lea: Q about writablestream-- will you be streaming HTML (yes) -- what about streaming data like JSON, can you write a transform stream? 06:25:41 JakeR: Yes, you can write your own transform stream 06:25:45 NoamR: and you can do that in a worker 06:26:03 NoamR: you can do fancy things like GraphQL 06:26:21 ack Jake 06:26:22 (??) stream of html that gets turned into elements 06:26:45 JakeA: ... question aboiut run-scripts option? 06:27:06 JakeA: I've been hoping to make this behave like regular html parser, ie html includes 06:27:14 Philip: as close to fragment parser not main parser 06:27:22 ... it will be like setting innerHTML 06:27:38 NoamR: will act as a regular fragment or contextual fragment that does run scripts 06:27:46 JakeA: I would like to go further than that... 06:28:01 Philip: Want to add additional controls to add one by one, but by default act like innerHTML 06:28:27 s/override defaults (?)/override default screenreader gestures/ 06:28:28 Because it is streaming running script end to end would be consistent-- thats what jake wants 06:28:29 ack wanderview 06:28:41 nidhi has joined #decl-partial-updates 06:28:47 wanderview: abort controller integration? 06:28:58 Philip: There is no promise, but you can abort a stream 06:29:15 JakeA: maybe a similar Q-- what happens when the stream errors? 06:29:28 NoamR: it just stops what it was doing, and everyone gets an error 06:29:57 (reference to abort the parser spec, ...) 06:30:11 wanderview: does anything happen when the pipe completes 06:30:14 q? 06:30:18 wanderview: is there an event? 06:30:33 NoamR: possible we could have an event, or for errors i.e. fail to match to content 06:30:54 q+ 06:31:11 wanderview: this might make things more tightly coupled-- what creates content and the ... reference to 'load' events 06:31:24 q+ 06:31:26 NoamR: deliberately didn't want to do that-- but you can generate your own events 06:31:55 ack camille 06:31:58 We could fire these events onto document, because no event target, but haven't throuhg it through 06:32:17 camille: Q about streaming html and trusted types 06:32:35 Philip: we discussed this, but cannot make streaming compat with trusted types, because of chunks 06:32:44 camille: I get that but... 06:33:08 Philip: For now, if you have trusted types, streaming simply wont work-- but we want to update the sanitizer spec for streaming 06:33:22 camille: Reference to the options for safe/unsafe 06:33:54 NoamR: For the user case ... pass an options dictionary ... (this is complicated) 06:34:05 ack jake 06:34:14 JakeA: we spoke about this on github a while ago 06:34:22 ... example with html and templates 06:34:31 ... If I have one of these for each of my pages 06:34:34 q+ 06:34:50 ... but one of the pages has a custom sidebar-- does every single page now need this sidebar 06:35:11 NoamR: we discussed about iframes and reloading each time.. 06:35:29 JakeA: Yes, several problems, but I'm referring to all the includes needing to have Everything that anything has 06:35:49 JakeA: But also the react-esque question about replacing elements vs persistance 06:36:07 NoamR: yes, but its no worse that separate html files 06:36:29 ... for the second we dont solve yet, but idea is "content-revision" attribution, super crude virtual dom... dont patch if you think it is the same 06:36:34 ack frehner 06:36:58 frehner: for out of order streaming, would this only work for initial stream / initial load? 06:37:12 NoamR: you can combine the two together 06:37:50 frehner: what about SPA with 100's of routes and long lived, is there concern about having many of these stay forever 06:37:50 NoamR: they dont stay 06:37:52 noamh has joined #decl-partial-updates 06:37:58 Philip: we don't attach the template, just the final dom 06:38:02 q+ 06:38:07 JakeA: declarative shadow dom is the same 06:38:27 NoamR: we were thinking about template conceptually as a scripting directive, but its a declarative update 06:38:45 ... regular template is a deferred update, and declarative shadow dom is an update to the root-- but this is... 06:38:47 ack jridgewell 06:39:06 jridgewell: why is this incompat with trusted types? couldn't we have create html chunk? 06:39:32 ... trusted types give you sanitization but also ... but if we had createHTMLChunk it could work for this specifically 06:39:42 Philip: this was one of our first attempts for this 06:39:54 westbrook has joined #decl-partial-updates 06:39:55 ...trusted html chunk was the first prototype 06:39:56 q? 06:40:05 q+ 06:40:38 ... (tldr you would still have to implement your own parser and cannot use browser parser) 06:40:59 Simon: yes, but you could still stream into inert and then parse that 06:41:21 ... but the browser streams first, then other script can look at that stream after 06:41:49 Philip: ...it would only work if you have a bunch of sibling nodes, not a giant root 06:41:59 Simon... because you need to sanitize the tree not the stream? 06:42:15 NoamR: main solution is to have trusted options things, but we dont want to ship that before working on the sanitizer 06:42:15 s/stream/string/ 06:42:43 ... once that ships you won't need to use the sanitizer and could use trusted types 06:42:43 ack noam 06:43:09 noam: (NoamH): could this be used to implement a infinite virtual scroller? But such a component would also require to remove elements as well as append 06:43:23 Philip: 4 modes append, prepend, replace, ? 06:43:45 NoamR: we will likely need more content methods in the future, this was just a start 06:43:55 ydaniv has joined #decl-partial-updates 06:43:56 ... nothing prevents us from having more, this is a start 06:44:07 Simon: you want to append on one end and remove on another 06:44:13 ack westbrook 06:44:35 westbrook: contentname right not only addresses a single element 06:44:54 ... but if you could do multiple, could it be a way to do declarative shadow dom replacement? 06:45:06 NoamR: like a comma/space separated list 06:45:18 zakim, make minutes 06:45:18 I don't understand 'make minutes', masonf 06:45:24 rrsagent, make minutes 06:45:26 I have made the request to generate https://www.w3.org/2025/11/12-decl-partial-updates-minutes.html masonf 07:06:20 tantek-projector has left #decl-partial-updates 07:17:00 TabAtkins has left #decl-partial-updates 07:50:40 lea has left #decl-partial-updates 13:52:59 tidoust has joined #decl-partial-updates 13:53:02 RRSAgent, bye 13:53:02 I see no action items