unpoly-rails 3.10.2 → 3.11.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +84 -71
 - data/assets/unpoly/unpoly-bootstrap3.min.js +1 -1
 - data/assets/unpoly/unpoly-bootstrap4.min.js +1 -1
 - data/assets/unpoly/unpoly-bootstrap5.min.js +1 -1
 - data/assets/unpoly/unpoly-migrate.js +46 -15
 - data/assets/unpoly/unpoly-migrate.min.js +1 -1
 - data/assets/unpoly/unpoly.css +1 -0
 - data/assets/unpoly/unpoly.es6.js +1004 -652
 - data/assets/unpoly/unpoly.es6.min.js +1 -1
 - data/assets/unpoly/unpoly.js +1000 -647
 - data/assets/unpoly/unpoly.min.css +1 -1
 - data/assets/unpoly/unpoly.min.js +1 -1
 - data/lib/unpoly/rails/change/cache.rb +11 -4
 - data/lib/unpoly/rails/change/layer.rb +9 -2
 - data/lib/unpoly/rails/change.rb +11 -0
 - data/lib/unpoly/rails/version.rb +1 -1
 - metadata +5 -5
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 1c6a5d70255045b7a9ce724d489f50f7ebce4daa69c8a2311e7a5157eddb3979
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 774c7dc09bbe713625d961b206894c42d4c44b5625a2674dfb61973133efcf1c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 42b1229fb3ecac43bb5aee26e717ec03c3d42c46dd7b22e0bae0fa2a9e6de671c1f7f3cd20d408f26ace694e8b189b0a8d84bf9fb425ee0c66407e6177680c67
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 6e5c8edfe5ffafc9b643598bd7104a8b1b14f4d422ee831c2c26d3a1498da2b94e24819fdfc8d731b9476e709e7ccf710465edf8055003f3cb2095dffbcd4c12
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -25,9 +25,9 @@ Now run `bundle install` and restart your development server. 
     | 
|
| 
       25 
25 
     | 
    
         
             
            Installing frontend assets
         
     | 
| 
       26 
26 
     | 
    
         
             
            --------------------------
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
            ### With  
     | 
| 
      
 28 
     | 
    
         
            +
            ### With npm
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
            If you're using [esbuild](https://esbuild.github.io/) or [Webpacker](https://edgeguides.rubyonrails.org/webpacker.html), install the [`unpoly` npm package](https://unpoly.com/install/npm) to get Unpoly's frontend files.
         
     | 
| 
      
 30 
     | 
    
         
            +
            If you're using a build tool like [esbuild](https://esbuild.github.io/) or [Webpacker](https://edgeguides.rubyonrails.org/webpacker.html), install the [`unpoly` npm package](https://unpoly.com/install/npm) to get Unpoly's frontend files.
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
            Now `import` Unpoly from your `application.js` pack:
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
         @@ -41,7 +41,7 @@ You may need to import [additional files](https://unpoly.com/install), e.g. when 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
            ### With the Asset Pipeline
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
            If you're using the [Asset Pipeline](https://guides.rubyonrails.org/asset_pipeline.html), this `unpoly-rails` gem also contains Unpoly's frontend files. 
     | 
| 
      
 44 
     | 
    
         
            +
            If you're using the [Asset Pipeline](https://guides.rubyonrails.org/asset_pipeline.html), this `unpoly-rails` gem also contains Unpoly's frontend files.  The files are automatically added to the Asset Pipeline's <a href="https://guides.rubyonrails.org/asset_pipeline.html#search-paths">search path</a>.
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            Add the following line to your `application.js` manifest:
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
         @@ -270,51 +270,6 @@ For this to work you must also include the `<meta name="csp-nonce">` tag in the 
     | 
|
| 
       270 
270 
     | 
    
         
             
            > Prefixing nonces only works for `[up-on...]` attributes. You cannot use it for native HTML attributes like `[onclick]`.
         
     | 
| 
       271 
271 
     | 
    
         | 
| 
       272 
272 
     | 
    
         | 
| 
       273 
     | 
    
         
            -
            ### Working with context
         
     | 
| 
       274 
     | 
    
         
            -
             
     | 
| 
       275 
     | 
    
         
            -
            Calling `up.context` will return the [context](https://unpoly.com/up.context) object of the targeted layer.
         
     | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
       277 
     | 
    
         
            -
            The context is a JSON object shared between the frontend and the server.
         
     | 
| 
       278 
     | 
    
         
            -
            It persists for a series of Unpoly navigation, but is cleared when the user makes a full page load.
         
     | 
| 
       279 
     | 
    
         
            -
            Different Unpoly [layers](https://unpoly.com/up.layer) will usually have separate context objects,
         
     | 
| 
       280 
     | 
    
         
            -
            although layers may choose to share their context scope. 
         
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
       282 
     | 
    
         
            -
            You may read and change the context object. Changes will be sent to the frontend with your response.
         
     | 
| 
       283 
     | 
    
         
            -
             
     | 
| 
       284 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       285 
     | 
    
         
            -
            class GamesController < ApplicationController
         
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
       287 
     | 
    
         
            -
              def restart
         
     | 
| 
       288 
     | 
    
         
            -
                up.context[:lives] = 3
         
     | 
| 
       289 
     | 
    
         
            -
                render 'stage1'
         
     | 
| 
       290 
     | 
    
         
            -
              end
         
     | 
| 
       291 
     | 
    
         
            -
             
     | 
| 
       292 
     | 
    
         
            -
            end
         
     | 
| 
       293 
     | 
    
         
            -
            ```
         
     | 
| 
       294 
     | 
    
         
            -
             
     | 
| 
       295 
     | 
    
         
            -
            Keys can be accessed as either strings or symbols:
         
     | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       298 
     | 
    
         
            -
            puts "You have " + up.layer.context[:lives] + " lives left"
         
     | 
| 
       299 
     | 
    
         
            -
            puts "You have " + up.layer.context['lives'] + " lives left"
         
     | 
| 
       300 
     | 
    
         
            -
            ````
         
     | 
| 
       301 
     | 
    
         
            -
             
     | 
| 
       302 
     | 
    
         
            -
            You may delete a key from the frontend by calling `up.context.delete`:
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       305 
     | 
    
         
            -
            up.context.delete(:foo)
         
     | 
| 
       306 
     | 
    
         
            -
            ````
         
     | 
| 
       307 
     | 
    
         
            -
             
     | 
| 
       308 
     | 
    
         
            -
            You may replace the entire context by calling `up.context.replace`: 
         
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
       310 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       311 
     | 
    
         
            -
            context_from_file = JSON.parse(File.read('context.json))
         
     | 
| 
       312 
     | 
    
         
            -
            up.context.replace(context_from_file)
         
     | 
| 
       313 
     | 
    
         
            -
            ```
         
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
            `up.context` is an alias for `up.layer.context`.
         
     | 
| 
       316 
     | 
    
         
            -
             
     | 
| 
       317 
     | 
    
         
            -
             
     | 
| 
       318 
273 
     | 
    
         
             
            ### Accessing the targeted layer
         
     | 
| 
       319 
274 
     | 
    
         | 
| 
       320 
275 
     | 
    
         
             
            Use the methods below to interact with the [layer](/up.layer) of the fragment being targeted.
         
     | 
| 
         @@ -376,49 +331,61 @@ Returns whether the layer targeted for a failed response is an overlay. 
     | 
|
| 
       376 
331 
     | 
    
         | 
| 
       377 
332 
     | 
    
         
             
            Returns the [context](https://unpoly.com/up.context) object of the layer targeted for a failed response.
         
     | 
| 
       378 
333 
     | 
    
         | 
| 
      
 334 
     | 
    
         
            +
            #### `up.origin_layer.mode`
         
     | 
| 
       379 
335 
     | 
    
         | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
      
 336 
     | 
    
         
            +
            Returns the [mode](https://unpoly.com/up.layer.mode) of the layer that caused the request.
         
     | 
| 
       381 
337 
     | 
    
         | 
| 
       382 
     | 
    
         
            -
             
     | 
| 
       383 
     | 
    
         
            -
            Only `GET` requests are cached. The entire cache is expired after every non-`GET` request (like `POST` or `PUT`).
         
     | 
| 
      
 338 
     | 
    
         
            +
            #### `up.origin_layer.root?`
         
     | 
| 
       384 
339 
     | 
    
         | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
      
 340 
     | 
    
         
            +
            Returns whether the layer that caused the request is the root layer.
         
     | 
| 
      
 341 
     | 
    
         
            +
             
     | 
| 
      
 342 
     | 
    
         
            +
            #### `up.origin_layer.overlay?`
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
            Returns whether the layer that caused the request is an overlay.
         
     | 
| 
      
 345 
     | 
    
         
            +
             
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
      
 347 
     | 
    
         
            +
            ### Opening a new overlay
         
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
            You can request the frontend to [render your response in a new overlay](https://unpoly.com/X-Up-Open-Layer):
         
     | 
| 
       386 
350 
     | 
    
         | 
| 
       387 
351 
     | 
    
         
             
            ```ruby
         
     | 
| 
       388 
     | 
    
         
            -
            up. 
     | 
| 
      
 352 
     | 
    
         
            +
            up.layer.open
         
     | 
| 
       389 
353 
     | 
    
         
             
            ```
         
     | 
| 
       390 
354 
     | 
    
         | 
| 
       391 
     | 
    
         
            -
             
     | 
| 
      
 355 
     | 
    
         
            +
            This will discard the [initial request target](#detecting-a-fragment-update)
         
     | 
| 
      
 356 
     | 
    
         
            +
            and render your response into [`:main`](https://unpoly.com/main). You can pass an explicit
         
     | 
| 
      
 357 
     | 
    
         
            +
            target as a `:target` option:
         
     | 
| 
       392 
358 
     | 
    
         | 
| 
       393 
359 
     | 
    
         
             
            ```ruby
         
     | 
| 
       394 
     | 
    
         
            -
            up. 
     | 
| 
      
 360 
     | 
    
         
            +
            up.layer.open(target: '#overlay')
         
     | 
| 
       395 
361 
     | 
    
         
             
            ```
         
     | 
| 
       396 
362 
     | 
    
         | 
| 
       397 
     | 
    
         
            -
             
     | 
| 
      
 363 
     | 
    
         
            +
            Any [visual layer options](https://unpoly.com/customizing-overlays) can be also be passed as keyword arguments:
         
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
       398 
365 
     | 
    
         | 
| 
       399 
366 
     | 
    
         
             
            ```ruby
         
     | 
| 
       400 
     | 
    
         
            -
            up. 
     | 
| 
      
 367 
     | 
    
         
            +
            up.layer.open(mode: 'drawer', position: 'right')
         
     | 
| 
       401 
368 
     | 
    
         
             
            ```
         
     | 
| 
       402 
369 
     | 
    
         | 
| 
       403 
     | 
    
         
            -
             
     | 
| 
      
 370 
     | 
    
         
            +
             
     | 
| 
      
 371 
     | 
    
         
            +
            ### Expiring the client-side cache
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
            The Unpoly frontend [caches server responses](https://unpoly.com/caching) for a few minutes, making requests to these URLs return instantly.
         
     | 
| 
      
 374 
     | 
    
         
            +
            Only `GET` requests are cached. The entire cache is expired after every non-`GET` request (like `POST` or `PUT`).
         
     | 
| 
      
 375 
     | 
    
         
            +
             
     | 
| 
      
 376 
     | 
    
         
            +
            The server may override these defaults. For instance, the server can expire Unpoly's client-side response cache, even for `GET` requests:
         
     | 
| 
       404 
377 
     | 
    
         | 
| 
       405 
378 
     | 
    
         
             
            ```ruby
         
     | 
| 
       406 
     | 
    
         
            -
             
     | 
| 
      
 379 
     | 
    
         
            +
            up.cache.expire
         
     | 
| 
      
 380 
     | 
    
         
            +
            ```
         
     | 
| 
       407 
381 
     | 
    
         | 
| 
       408 
     | 
    
         
            -
             
     | 
| 
       409 
     | 
    
         
            -
             
     | 
| 
       410 
     | 
    
         
            -
             
     | 
| 
       411 
     | 
    
         
            -
             
     | 
| 
       412 
     | 
    
         
            -
                  redirect_to(@note)
         
     | 
| 
       413 
     | 
    
         
            -
                else
         
     | 
| 
       414 
     | 
    
         
            -
                  up.cache.expire(false) # Keep the cache fresh because we haven't saved
         
     | 
| 
       415 
     | 
    
         
            -
                  render 'new'
         
     | 
| 
       416 
     | 
    
         
            -
                end
         
     | 
| 
       417 
     | 
    
         
            -
              end
         
     | 
| 
       418 
     | 
    
         
            -
              ...
         
     | 
| 
       419 
     | 
    
         
            -
            end
         
     | 
| 
      
 382 
     | 
    
         
            +
            You may also expire a single URL or [URL pattern](https://unpoly.com/url-patterns):
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 385 
     | 
    
         
            +
            up.cache.expire('/notes/*')
         
     | 
| 
       420 
386 
     | 
    
         
             
            ```
         
     | 
| 
       421 
387 
     | 
    
         | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
       422 
389 
     | 
    
         
             
            ### Evicting pages from the client-side cache
         
     | 
| 
       423 
390 
     | 
    
         | 
| 
       424 
391 
     | 
    
         
             
            Instead of *expiring* pages from the cache you may also *evict*. The difference is that expired pages can still be rendered instantly and are then [revalidated](/caching#revalidation) with the server. Evicted pages are erased from the cache.
         
     | 
| 
         @@ -498,6 +465,52 @@ If the initial page was loaded with a non-`GET` HTTP method, Unpoly will fall ba 
     | 
|
| 
       498 
465 
     | 
    
         
             
            The reason for this is that some browsers remember the method of the initial page load and don't let the application change it, even with `pushState`. Thus, when the user reloads the page much later, an affected browser might request a `POST`, `PUT`, etc. instead of the correct method.
         
     | 
| 
       499 
466 
     | 
    
         | 
| 
       500 
467 
     | 
    
         | 
| 
      
 468 
     | 
    
         
            +
            ### Working with context
         
     | 
| 
      
 469 
     | 
    
         
            +
             
     | 
| 
      
 470 
     | 
    
         
            +
            Calling `up.context` will return the [context](https://unpoly.com/up.context) object of the targeted layer.
         
     | 
| 
      
 471 
     | 
    
         
            +
             
     | 
| 
      
 472 
     | 
    
         
            +
            The context is a JSON object shared between the frontend and the server.
         
     | 
| 
      
 473 
     | 
    
         
            +
            It persists for a series of Unpoly navigation, but is cleared when the user makes a full page load.
         
     | 
| 
      
 474 
     | 
    
         
            +
            Different Unpoly [layers](https://unpoly.com/up.layer) will usually have separate context objects,
         
     | 
| 
      
 475 
     | 
    
         
            +
            although layers may choose to share their context scope.
         
     | 
| 
      
 476 
     | 
    
         
            +
             
     | 
| 
      
 477 
     | 
    
         
            +
            You may read and change the context object. Changes will be sent to the frontend with your response.
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
      
 479 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 480 
     | 
    
         
            +
            class GamesController < ApplicationController
         
     | 
| 
      
 481 
     | 
    
         
            +
             
     | 
| 
      
 482 
     | 
    
         
            +
              def restart
         
     | 
| 
      
 483 
     | 
    
         
            +
                up.context[:lives] = 3
         
     | 
| 
      
 484 
     | 
    
         
            +
                render 'stage1'
         
     | 
| 
      
 485 
     | 
    
         
            +
              end
         
     | 
| 
      
 486 
     | 
    
         
            +
             
     | 
| 
      
 487 
     | 
    
         
            +
            end
         
     | 
| 
      
 488 
     | 
    
         
            +
            ```
         
     | 
| 
      
 489 
     | 
    
         
            +
             
     | 
| 
      
 490 
     | 
    
         
            +
            Keys can be accessed as either strings or symbols:
         
     | 
| 
      
 491 
     | 
    
         
            +
             
     | 
| 
      
 492 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 493 
     | 
    
         
            +
            puts "You have " + up.layer.context[:lives] + " lives left"
         
     | 
| 
      
 494 
     | 
    
         
            +
            puts "You have " + up.layer.context['lives'] + " lives left"
         
     | 
| 
      
 495 
     | 
    
         
            +
            ````
         
     | 
| 
      
 496 
     | 
    
         
            +
             
     | 
| 
      
 497 
     | 
    
         
            +
            You may delete a key from the frontend by calling `up.context.delete`:
         
     | 
| 
      
 498 
     | 
    
         
            +
             
     | 
| 
      
 499 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 500 
     | 
    
         
            +
            up.context.delete(:foo)
         
     | 
| 
      
 501 
     | 
    
         
            +
            ````
         
     | 
| 
      
 502 
     | 
    
         
            +
             
     | 
| 
      
 503 
     | 
    
         
            +
            You may replace the entire context by calling `up.context.replace`:
         
     | 
| 
      
 504 
     | 
    
         
            +
             
     | 
| 
      
 505 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 506 
     | 
    
         
            +
            context_from_file = JSON.parse(File.read('context.json))
         
     | 
| 
      
 507 
     | 
    
         
            +
            up.context.replace(context_from_file)
         
     | 
| 
      
 508 
     | 
    
         
            +
            ```
         
     | 
| 
      
 509 
     | 
    
         
            +
             
     | 
| 
      
 510 
     | 
    
         
            +
            `up.context` is an alias for `up.layer.context`.
         
     | 
| 
      
 511 
     | 
    
         
            +
             
     | 
| 
      
 512 
     | 
    
         
            +
             
     | 
| 
      
 513 
     | 
    
         
            +
             
     | 
| 
       501 
514 
     | 
    
         
             
            What you still need to do manually
         
     | 
| 
       502 
515 
     | 
    
         
             
            ----------------------------------
         
     | 
| 
       503 
516 
     | 
    
         | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            (()=>{var o={ 
     | 
| 
      
 1 
     | 
    
         
            +
            (()=>{var o={952:(o,p,u)=>{"use strict";u.r(p)}},p={};function u(e){var a=p[e];if(void 0!==a)return a.exports;var t=p[e]={exports:{}};return o[e](t,t.exports,u),t.exports}u.r=o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"o",{value:!0})},up.status.config.currentClasses.push("active"),up.status.config.activeClasses.push("active"),up.status.config.navSelectors.push(".nav",".navbar"),up.form.config.groupSelectors.unshift(".form-group"),up.viewport.config.fixedTopSelectors.push(".navbar-fixed-top"),up.viewport.config.fixedBottomSelectors.push(".navbar-fixed-bottom"),up.viewport.config.anchoredRightSelectors.push(".navbar-fixed-top",".navbar-fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg)?(-\d+)?$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),u(952)})();
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            (()=>{var o={ 
     | 
| 
      
 1 
     | 
    
         
            +
            (()=>{var o={308:(o,p,u)=>{"use strict";u.r(p)}},p={};function u(e){var t=p[e];if(void 0!==t)return t.exports;var a=p[e]={exports:{}};return o[e](a,a.exports,u),a.exports}u.r=o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"o",{value:!0})},up.status.config.currentClasses.push("active"),up.status.config.activeClasses.push("active"),up.status.config.navSelectors.push(".nav",".navbar"),up.form.config.groupSelectors.unshift(".form-group"),up.viewport.config.fixedTopSelectors.push(".navbar.fixed-top"),up.viewport.config.fixedBottomSelectors.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRightSelectors.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl)?(-\d+)?$/,/^[mp][tblrxy]?-\d+$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),u(308)})();
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            (()=>{var o={ 
     | 
| 
      
 1 
     | 
    
         
            +
            (()=>{var o={399:(o,p,e)=>{"use strict";e.r(p)}},p={};function e(u){var t=p[u];if(void 0!==t)return t.exports;var a=p[u]={exports:{}};return o[u](a,a.exports,e),a.exports}e.r=o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"o",{value:!0})},up.status.config.currentClasses.push("active"),up.status.config.activeClasses.push("active"),up.status.config.navSelectors.push(".nav",".navbar"),up.viewport.config.fixedTopSelectors.push(".navbar.fixed-top"),up.viewport.config.fixedBottomSelectors.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRightSelectors.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl|-xxl)?(-\d+)?$/,/^[mp][tbsexy]?-\d+$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),e(399)})();
         
     | 
| 
         @@ -129,12 +129,16 @@ up.migrate = (function () { 
     | 
|
| 
       129 
129 
     | 
    
         
             
                        }
         
     | 
| 
       130 
130 
     | 
    
         
             
                    });
         
     | 
| 
       131 
131 
     | 
    
         
             
                }
         
     | 
| 
       132 
     | 
    
         
            -
                 
     | 
| 
      
 132 
     | 
    
         
            +
                let warnedMessages = {};
         
     | 
| 
      
 133 
     | 
    
         
            +
                function reset() {
         
     | 
| 
      
 134 
     | 
    
         
            +
                    warnedMessages = {};
         
     | 
| 
      
 135 
     | 
    
         
            +
                }
         
     | 
| 
       133 
136 
     | 
    
         
             
                const warn = up.mockable((message, ...args) => {
         
     | 
| 
       134 
137 
     | 
    
         
             
                    const formattedMessage = u.sprintf(message, ...args);
         
     | 
| 
       135 
     | 
    
         
            -
                     
     | 
| 
      
 138 
     | 
    
         
            +
                    const logLevel = config.logLevel;
         
     | 
| 
      
 139 
     | 
    
         
            +
                    if (logLevel !== 'none' && !warnedMessages[formattedMessage]) {
         
     | 
| 
       136 
140 
     | 
    
         
             
                        warnedMessages[formattedMessage] = true;
         
     | 
| 
       137 
     | 
    
         
            -
                        up.log[ 
     | 
| 
      
 141 
     | 
    
         
            +
                        up.log[logLevel]('unpoly-migrate', message, ...args);
         
     | 
| 
       138 
142 
     | 
    
         
             
                    }
         
     | 
| 
       139 
143 
     | 
    
         
             
                });
         
     | 
| 
       140 
144 
     | 
    
         
             
                function deprecated(deprecatedExpression, replacementExpression) {
         
     | 
| 
         @@ -195,6 +199,7 @@ up.migrate = (function () { 
     | 
|
| 
       195 
199 
     | 
    
         
             
                    }
         
     | 
| 
       196 
200 
     | 
    
         
             
                    return transformed;
         
     | 
| 
       197 
201 
     | 
    
         
             
                }
         
     | 
| 
      
 202 
     | 
    
         
            +
                up.on('up:framework:reset', reset);
         
     | 
| 
       198 
203 
     | 
    
         
             
                return {
         
     | 
| 
       199 
204 
     | 
    
         
             
                    deprecated,
         
     | 
| 
       200 
205 
     | 
    
         
             
                    renamedPackage,
         
     | 
| 
         @@ -492,6 +497,18 @@ up.migrate.migratedFormGroupSelectors = function () { 
     | 
|
| 
       492 
497 
     | 
    
         
             
                    return migratedSelector;
         
     | 
| 
       493 
498 
     | 
    
         
             
                });
         
     | 
| 
       494 
499 
     | 
    
         
             
            };
         
     | 
| 
      
 500 
     | 
    
         
            +
            up.migrate.watchForSwitch = function (root, callback) {
         
     | 
| 
      
 501 
     | 
    
         
            +
                if (root.matches('input[type=radio]')) {
         
     | 
| 
      
 502 
     | 
    
         
            +
                    up.migrate.warn('Using [up-switch] on an individual radio button is deprecated (%o). Use [up-switch] on the container of a radio group instead.', root);
         
     | 
| 
      
 503 
     | 
    
         
            +
                    return up.on(root, 'change', callback);
         
     | 
| 
      
 504 
     | 
    
         
            +
                }
         
     | 
| 
      
 505 
     | 
    
         
            +
            };
         
     | 
| 
      
 506 
     | 
    
         
            +
            up.migrate.checkedRadioButtonForSwitch = function (siblingButton) {
         
     | 
| 
      
 507 
     | 
    
         
            +
                const region = up.form.getRegion(siblingButton);
         
     | 
| 
      
 508 
     | 
    
         
            +
                const groupName = siblingButton.getAttribute('name');
         
     | 
| 
      
 509 
     | 
    
         
            +
                const groupButtonsSelector = 'input[type=radio]' + up.element.attrSelector('name', groupName);
         
     | 
| 
      
 510 
     | 
    
         
            +
                return region.querySelector(groupButtonsSelector + ':checked');
         
     | 
| 
      
 511 
     | 
    
         
            +
            };
         
     | 
| 
       495 
512 
     | 
    
         
             
            up.migrate.renamedAttribute('up-observe', 'up-watch');
         
     | 
| 
       496 
513 
     | 
    
         
             
            up.migrate.renamedAttribute('up-fieldset', 'up-form-group');
         
     | 
| 
       497 
514 
     | 
    
         
             
            up.migrate.renamedAttribute('up-delay', 'up-watch-delay', { scope: '[up-autosubmit]' });
         
     | 
| 
         @@ -518,7 +535,7 @@ up.migrate.renamedPackage('dom', 'fragment'); 
     | 
|
| 
       518 
535 
     | 
    
         
             
            up.fragment.config.patch(function (config) {
         
     | 
| 
       519 
536 
     | 
    
         
             
                up.migrate.renamedProperty(config, 'fallbacks', 'mainTargets');
         
     | 
| 
       520 
537 
     | 
    
         
             
            });
         
     | 
| 
       521 
     | 
    
         
            -
            up.migrate.handleResponseDocOptions = docOptions => up.migrate.fixKey(docOptions, 'html', 'document');
         
     | 
| 
      
 538 
     | 
    
         
            +
            up.migrate.handleResponseDocOptions = (docOptions) => up.migrate.fixKey(docOptions, 'html', 'document');
         
     | 
| 
       522 
539 
     | 
    
         
             
            up.fragment.config.patch(function (config) {
         
     | 
| 
       523 
540 
     | 
    
         
             
                let matchAroundOriginDeprecated = () => up.migrate.deprecated('up.fragment.config.matchAroundOrigin', 'up.fragment.config.match');
         
     | 
| 
       524 
541 
     | 
    
         
             
                Object.defineProperty(config, 'matchAroundOrigin', {
         
     | 
| 
         @@ -595,7 +612,7 @@ up.migrate.preprocessRenderOptions = function (options) { 
     | 
|
| 
       595 
612 
     | 
    
         
             
                    options.scroll = false;
         
     | 
| 
       596 
613 
     | 
    
         
             
                }
         
     | 
| 
       597 
614 
     | 
    
         
             
                if (options.resetScroll === true) {
         
     | 
| 
       598 
     | 
    
         
            -
                    up.migrate.deprecated('Option { resetScroll: true }', "{ scroll: ' 
     | 
| 
      
 615 
     | 
    
         
            +
                    up.migrate.deprecated('Option { resetScroll: true }', "{ scroll: 'top' }");
         
     | 
| 
       599 
616 
     | 
    
         
             
                    options.scroll = 'reset';
         
     | 
| 
       600 
617 
     | 
    
         
             
                }
         
     | 
| 
       601 
618 
     | 
    
         
             
                if (options.resetScroll === false) {
         
     | 
| 
         @@ -610,6 +627,10 @@ up.migrate.preprocessRenderOptions = function (options) { 
     | 
|
| 
       610 
627 
     | 
    
         
             
                    up.migrate.deprecated('Option { restoreScroll: false }', "{ scroll: false }");
         
     | 
| 
       611 
628 
     | 
    
         
             
                    options.scroll = false;
         
     | 
| 
       612 
629 
     | 
    
         
             
                }
         
     | 
| 
      
 630 
     | 
    
         
            +
                if (options.scroll === 'reset') {
         
     | 
| 
      
 631 
     | 
    
         
            +
                    up.migrate.deprecated("Option { scroll: 'reset'' }", "{ scroll: 'top' }");
         
     | 
| 
      
 632 
     | 
    
         
            +
                    options.scroll = 'top';
         
     | 
| 
      
 633 
     | 
    
         
            +
                }
         
     | 
| 
       613 
634 
     | 
    
         
             
            };
         
     | 
| 
       614 
635 
     | 
    
         
             
            up.migrate.postprocessReloadOptions = function (options) {
         
     | 
| 
       615 
636 
     | 
    
         
             
                var _a;
         
     | 
| 
         @@ -659,7 +680,7 @@ up.fragment.config.patch(function () { 
     | 
|
| 
       659 
680 
     | 
    
         
             
            });
         
     | 
| 
       660 
681 
     | 
    
         
             
            up.on('up:framework:boot', function () {
         
     | 
| 
       661 
682 
     | 
    
         
             
                if (!up.fragment.config.runScriptsSet) {
         
     | 
| 
       662 
     | 
    
         
            -
                    up.migrate.warn('Scripts within fragments are  
     | 
| 
      
 683 
     | 
    
         
            +
                    up.migrate.warn('Scripts within fragments are no longer executed. Configure up.fragment.config.runScripts to remove this warning.');
         
     | 
| 
       663 
684 
     | 
    
         
             
                }
         
     | 
| 
       664 
685 
     | 
    
         
             
            });
         
     | 
| 
       665 
686 
     | 
    
         
             
            up.compiler('[up-keep]', function (element) {
         
     | 
| 
         @@ -695,7 +716,9 @@ up.migrate.renamedEvent('up:history:pushed', 'up:location:changed'); 
     | 
|
| 
       695 
716 
     | 
    
         
             
            up.migrate.renamedEvent('up:history:restore', 'up:location:changed');
         
     | 
| 
       696 
717 
     | 
    
         
             
            up.migrate.renamedEvent('up:history:restored', 'up:location:changed');
         
     | 
| 
       697 
718 
     | 
    
         
             
            up.migrate.renamedEvent('up:history:replaced', 'up:location:changed');
         
     | 
| 
       698 
     | 
    
         
            -
            up.migrate. 
     | 
| 
      
 719 
     | 
    
         
            +
            up.migrate.prepareLocationChangedEvent = function (event) {
         
     | 
| 
      
 720 
     | 
    
         
            +
                up.migrate.renamedProperty(event, 'url', 'location');
         
     | 
| 
      
 721 
     | 
    
         
            +
            };
         
     | 
| 
       699 
722 
     | 
    
         
             
            up.history.config.patch(function () {
         
     | 
| 
       700 
723 
     | 
    
         
             
                this.updateMetaTagsValue = this.updateMetaTags;
         
     | 
| 
       701 
724 
     | 
    
         
             
                this.updateMetaTagsSet = false;
         
     | 
| 
         @@ -789,12 +812,12 @@ up.migrate.transformAttribute('up-reveal', function (link, reveal) { 
     | 
|
| 
       789 
812 
     | 
    
         
             
            up.migrate.transformAttribute('up-reset-scroll', function (link, resetScroll) {
         
     | 
| 
       790 
813 
     | 
    
         
             
                switch (resetScroll) {
         
     | 
| 
       791 
814 
     | 
    
         
             
                    case '':
         
     | 
| 
       792 
     | 
    
         
            -
                        up.migrate.warn('Attribute [up-reset-scroll] has been replaced with [up-scroll=" 
     | 
| 
       793 
     | 
    
         
            -
                        link.setAttribute('up-scroll', ' 
     | 
| 
      
 815 
     | 
    
         
            +
                        up.migrate.warn('Attribute [up-reset-scroll] has been replaced with [up-scroll="top"]');
         
     | 
| 
      
 816 
     | 
    
         
            +
                        link.setAttribute('up-scroll', 'top');
         
     | 
| 
       794 
817 
     | 
    
         
             
                        break;
         
     | 
| 
       795 
818 
     | 
    
         
             
                    case 'true':
         
     | 
| 
       796 
     | 
    
         
            -
                        up.migrate.warn('Attribute [up-reset-scroll="true"] has been replaced with [up-scroll=" 
     | 
| 
       797 
     | 
    
         
            -
                        link.setAttribute('up-scroll', ' 
     | 
| 
      
 819 
     | 
    
         
            +
                        up.migrate.warn('Attribute [up-reset-scroll="true"] has been replaced with [up-scroll="top"]');
         
     | 
| 
      
 820 
     | 
    
         
            +
                        link.setAttribute('up-scroll', 'top');
         
     | 
| 
       798 
821 
     | 
    
         
             
                        break;
         
     | 
| 
       799 
822 
     | 
    
         
             
                    case 'false':
         
     | 
| 
       800 
823 
     | 
    
         
             
                        up.migrate.warn('Attribute [up-reset-scroll="false"] has been replaced with [up-scroll="false"]');
         
     | 
| 
         @@ -888,11 +911,11 @@ up.migrate.handleTetherOptions = function (options) { 
     | 
|
| 
       888 
911 
     | 
    
         
             
                    options.align = align;
         
     | 
| 
       889 
912 
     | 
    
         
             
                }
         
     | 
| 
       890 
913 
     | 
    
         
             
            };
         
     | 
| 
       891 
     | 
    
         
            -
            up.migrate.registerLayerCloser = layer => layer. 
     | 
| 
      
 914 
     | 
    
         
            +
            up.migrate.registerLayerCloser = (layer) => layer.registerAttrCloser('up-close', (value, closeOptions) => {
         
     | 
| 
       892 
915 
     | 
    
         
             
                up.migrate.deprecated('[up-close]', '[up-dismiss]');
         
     | 
| 
       893 
916 
     | 
    
         
             
                layer.dismiss(value, closeOptions);
         
     | 
| 
       894 
917 
     | 
    
         
             
            });
         
     | 
| 
       895 
     | 
    
         
            -
            up.migrate.handleLayerConfig = config => up.migrate.fixKey(config, 'historyVisible', 'history');
         
     | 
| 
      
 918 
     | 
    
         
            +
            up.migrate.handleLayerConfig = (config) => up.migrate.fixKey(config, 'historyVisible', 'history');
         
     | 
| 
       896 
919 
     | 
    
         
             
            Object.defineProperty(up.Layer.prototype, 'historyVisible', { get: function () {
         
     | 
| 
       897 
920 
     | 
    
         
             
                    up.migrate.deprecated('up.Layer#historyVisible', 'up.Layer#history');
         
     | 
| 
       898 
921 
     | 
    
         
             
                    return this.history;
         
     | 
| 
         @@ -1091,9 +1114,17 @@ up.migrate.handleRequestOptions = function (options) { 
     | 
|
| 
       1091 
1114 
     | 
    
         
             
                    up.migrate.warn('The option up.request({ solo }) has been removed. Use up.network.abort() or up.fragment.abort() instead.');
         
     | 
| 
       1092 
1115 
     | 
    
         
             
                }
         
     | 
| 
       1093 
1116 
     | 
    
         
             
            };
         
     | 
| 
      
 1117 
     | 
    
         
            +
            up.on('up:request:loaded', function (event) {
         
     | 
| 
      
 1118 
     | 
    
         
            +
                if (event.response.headers['X-Up-Expire-Cache'] === 'false') {
         
     | 
| 
      
 1119 
     | 
    
         
            +
                    up.migrate.warn('The server can no longer override an { expireCache } option using an `X-Up-Expire-Cache: false` response header');
         
     | 
| 
      
 1120 
     | 
    
         
            +
                }
         
     | 
| 
      
 1121 
     | 
    
         
            +
                if (event.response.headers['X-Up-Evict-Cache'] === 'false') {
         
     | 
| 
      
 1122 
     | 
    
         
            +
                    up.migrate.warn('The server can no longer override an { evictCache } option using an `X-Up-Evict-Cache: false` response header');
         
     | 
| 
      
 1123 
     | 
    
         
            +
                }
         
     | 
| 
      
 1124 
     | 
    
         
            +
            });
         
     | 
| 
       1094 
1125 
     | 
    
         
             
            up.ajax = function (...args) {
         
     | 
| 
       1095 
1126 
     | 
    
         
             
                up.migrate.deprecated('up.ajax()', 'up.request()');
         
     | 
| 
       1096 
     | 
    
         
            -
                const pickResponseText = response => response.text;
         
     | 
| 
      
 1127 
     | 
    
         
            +
                const pickResponseText = (response) => response.text;
         
     | 
| 
       1097 
1128 
     | 
    
         
             
                return up.request(...args).then(pickResponseText);
         
     | 
| 
       1098 
1129 
     | 
    
         
             
            };
         
     | 
| 
       1099 
1130 
     | 
    
         
             
            up.network.clear = function () {
         
     | 
| 
         @@ -1138,7 +1169,7 @@ up.Response.prototype.isError = function () { 
     | 
|
| 
       1138 
1169 
     | 
    
         
             
            };
         
     | 
| 
       1139 
1170 
     | 
    
         
             
            function mayHaveCustomIndicator() {
         
     | 
| 
       1140 
1171 
     | 
    
         
             
                const listeners = up.EventListener.allNonDefault(document);
         
     | 
| 
       1141 
     | 
    
         
            -
                return u.find(listeners, listener => listener.eventType === 'up:network:late');
         
     | 
| 
      
 1172 
     | 
    
         
            +
                return u.find(listeners, (listener) => listener.eventType === 'up:network:late');
         
     | 
| 
       1142 
1173 
     | 
    
         
             
            }
         
     | 
| 
       1143 
1174 
     | 
    
         
             
            const progressBarDefault = up.network.config.progressBar;
         
     | 
| 
       1144 
1175 
     | 
    
         
             
            up.network.config.patch(function (config) {
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            (()=>{var e={294:()=>{up.browser.loadPage=function(...e){return up.migrate.deprecated("up.browser.loadPage()","up.network.loadPage()"),up.network.loadPage(...e)},up.browser.isSupported=function(...e){return up.migrate.deprecated("up.browser.isSupported()","up.framework.isSupported()"),up.framework.isSupported(...e)}},390:()=>{up.Config.prototype.patch=function(e){let u=e.bind(this,this);u(),document.addEventListener("up:framework:reset",u)}},700:()=>{up.element.first=function(...e){return up.migrate.deprecated("up.element.first()","up.element.get()"),up.element.get(...e)},up.element.createFromHtml=function(...e){return up.migrate.deprecated("up.element.createFromHtml()","up.element.createFromHTML()"),up.element.createFromHTML(...e)},up.element.remove=function(e){return up.migrate.deprecated("up.element.remove()","Element#remove()"),e.remove()},up.element.matches=function(e,u){return up.migrate.deprecated("up.element.matches()","Element#matches()"),e.matches(u)},up.element.closest=function(e,u){return up.migrate.deprecated("up.element.closest()","Element#closest()"),e.closest(u)},up.element.replace=function(e,u){return up.migrate.deprecated("up.element.replace()","Element#replaceWith()"),e.replaceWith(u)},up.element.all=function(...e){up.migrate.deprecated("up.element.all()","Document#querySelectorAll() or Element#querySelectorAll()");const u=e.pop();return(e[0]||document).querySelectorAll(u)},up.element.toggleClass=function(e,u,t){up.migrate.deprecated("up.element.toggleClass()","element.classList.toggle()");const p=e.classList;return null==t&&(t=!p.contains(u)),t?p.add(u):p.remove(u)},up.element.toSelector=function(...e){return up.migrate.deprecated("up.element.toSelector()","up.fragment.toTarget()"),up.fragment.toTarget(...e)},up.element.isAttached=function(e){return up.migrate.deprecated("up.element.isAttached()","document.contains(element)"),document.contains(e)},up.element.isDetached=function(e){return up.migrate.deprecated("up.element.isDetached()","!document.contains(element)"),!up.element.isAttached(e)}},937:()=>{class DeprecatedCannotCompile extends up.Error{}Object.defineProperty(up,"CannotCompile",{get:function(){return up.migrate.warn('The error up.CannotCompile is no longer thrown. Compiler errors now emit an "error" event on window, but no longer crash the render pass.'),DeprecatedCannotCompile}})},394:()=>{up.migrate.renamedPackage("bus","event"),up.event.nobodyPrevents=function(...e){return up.migrate.deprecated("up.event.nobodyPrevents(type)","!up.emit(type).defaultPrevented"),!up.emit(...e).defaultPrevented},up.$on=function(...e){up.migrate.warn("up.$on() has been deprecated. Instead use up.on() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return u.upNativeCallback=function(e,t,p){let o=jQuery(t);u.call(o,e,o,p)},up.on(...e,u.upNativeCallback)},up.$off=function(...e){up.migrate.deprecated("up.$off()","up.off()");let u=e.pop().upNativeCallback;return u||up.fail("The callback passed to up.$off() was never registered with up.$on()"),up.off(...e,u)}},305:()=>{up.form.config.patch((function(e){up.migrate.renamedProperty(e,"fields","fieldSelectors"),up.migrate.renamedProperty(e,"submitButtons","submitButtonSelectors"),up.migrate.renamedProperty(e,"validateTargets","groupSelectors"),up.migrate.renamedProperty(e,"observeDelay","watchInputDelay")})),up.migrate.migratedFormGroupSelectors=function(){return up.form.config.groupSelectors.map((e=>{let u=e.replace(/:has\((:origin|&)\)$/,"");return e!==u&&up.migrate.warn('Selectors in up.form.config.groupSelectors must not contain ":has(:origin)". The suffix is added automatically where required. Found in "%s".',e),u}))},up.migrate.renamedAttribute("up-observe","up-watch"),up.migrate.renamedAttribute("up-fieldset","up-form-group"),up.migrate.renamedAttribute("up-delay","up-watch-delay",{scope:"[up-autosubmit]"}),up.migrate.renamedAttribute("up-delay","up-watch-delay",{scope:"[up-watch]"}),up.observe=function(...e){if(up.migrate.deprecated("up.observe()","up.watch()"),up.util.isList(e[0])&&e[0].length>1){let u=e.shift();up.migrate.warn("Calling up.observe() with a list of multiple elements is no longer supported by up.watch()");let t=up.util.map(u,(u=>up.watch(u,...e)));return up.util.sequence(t)}return up.watch(...e)}},354:()=>{const e=up.util;up.migrate.renamedPackage("flow","fragment"),up.migrate.renamedPackage("dom","fragment"),up.fragment.config.patch((function(e){up.migrate.renamedProperty(e,"fallbacks","mainTargets")})),up.migrate.handleResponseDocOptions=e=>up.migrate.fixKey(e,"html","document"),up.fragment.config.patch((function(e){let u=()=>up.migrate.deprecated("up.fragment.config.matchAroundOrigin","up.fragment.config.match");Object.defineProperty(e,"matchAroundOrigin",{configurable:!0,get:function(){return u(),"closest"===this.match},set:function(e){u(),this.match=e?"region":"first"}})})),up.replace=function(e,u,t){return up.migrate.deprecated("up.replace(target, url)","up.navigate(target, { url })"),up.navigate(Object.assign(Object.assign({},t),{target:e,url:u}))},up.extract=function(e,u,t){return up.migrate.deprecated("up.extract(target, document)","up.navigate(target, { document })"),up.navigate(Object.assign(Object.assign({},t),{target:e,document:u}))},up.fragment.first=function(...e){return up.migrate.deprecated("up.fragment.first()","up.fragment.get()"),up.fragment.get(...e)},up.first=up.fragment.first,up.migrate.preprocessRenderOptions=function(u){e.isString(u.history)&&"auto"!==u.history&&(up.migrate.warn("Passing a URL as { history } option is deprecated. Pass it as { location } instead."),u.location=u.history,u.history="auto");for(let t of["target","origin"])e.isJQuery(u[t])&&(up.migrate.warn("Passing a jQuery collection as { %s } is deprecated. Pass it as a native element instead.",t),u[t]=up.element.get(u[t]));"auto"===u.fail&&(up.migrate.warn("The option { fail: 'auto' } is deprecated. Omit the option instead."),delete u.fail);let t=e.pluckKey(u,"solo");e.isString(t)?(up.migrate.warn("The up.render() option { solo } has been replaced with { abort } and { abort } no longer accepts a URL pattern. Check if you can use { abort: 'target'} or use up.network.abort(pattern) instead."),u.abort=e=>up.network.abort(t,e)):e.isFunction(t)?(up.migrate.warn("The up.render() option { solo } has been replaced with { abort } and { abort } no longer accepts a Function(up.Request): boolean. Check if you can use { abort: 'target'} or use up.network.abort(fn) instead."),u.abort=e=>{up.network.abort(t,e)}):!0===t?(up.migrate.deprecated("Option { solo: true }","{ abort: 'all' }"),u.abort="all"):!1===t&&(up.migrate.deprecated("Option { solo: false }","{ abort: false }"),up.migrate.warn("Unpoly 3+ only aborts requests targeting the same fragment. Setting { solo: false } may no longer be necessary."),u.abort=!1),up.migrate.fixKey(u,"failOnFinished","onFailFinished"),up.migrate.fixKey(u,"badResponseTime","lateDelay"),e.isString(u.reveal)?(up.migrate.deprecated(`Option { reveal: '${u.reveal}' }`,`{ scroll: '${u.reveal}' }`),u.scroll=u.reveal):!0===u.reveal?(up.migrate.deprecated("Option { reveal: true }","{ scroll: 'target' }"),u.scroll="target"):!1===u.reveal&&(up.migrate.deprecated("Option { reveal: false }","{ scroll: false }"),u.scroll=!1),!0===u.resetScroll&&(up.migrate.deprecated("Option { resetScroll: true }","{ scroll: 'reset' }"),u.scroll="reset"),!1===u.resetScroll&&(up.migrate.deprecated("Option { resetScroll: false }","{ scroll: false }"),u.scroll=!1),!0===u.restoreScroll&&(up.migrate.deprecated("Option { restoreScroll: true }","{ scroll: 'restore' }"),u.scroll="restore"),!1===u.restoreScroll&&(up.migrate.deprecated("Option { restoreScroll: false }","{ scroll: false }"),u.scroll=!1)},up.migrate.postprocessReloadOptions=function(e){var u;let t,p=null===(u=e.headers)||void 0===u?void 0:u["If-Modified-Since"];t=p?Math.floor(.001*new Date(p)).toString():"0",e.headers[up.protocol.headerize("reloadFromTime")]=t},up.migrate.resolveOrigin=function(e,{origin:u}={}){return e.replace(/"[^"]*"|'[^']*'|&|:origin\b/g,(function(t){return":origin"!==t&&"&"!==t?t:("&"===t&&up.migrate.deprecated("Origin shorthand '&'",":origin"),u?up.fragment.toTarget(u):void up.fail('Missing { origin } element to resolve "%s" reference (found in %s)',t,e))}))},up.migrate.removedEvent("up:fragment:kept","up:fragment:keep"),up.fragment.config.patch((function(){this.runScriptsValue=this.runScripts,this.runScriptsSet=!1,Object.defineProperty(this,"runScripts",{configurable:!0,get(){return this.runScriptsValue},set(e){this.runScriptsValue=e,this.runScriptsSet=!0}})})),up.on("up:framework:boot",(function(){up.fragment.config.runScriptsSet||up.migrate.warn("Scripts within fragments are now executed. Configure up.fragment.config.runScripts to remove this warning.")})),up.compiler("[up-keep]",(function(u){let t=up.element.booleanOrStringAttr(u,"up-keep");e.isString(t)&&(up.migrate.warn('The [up-keep] attribute no longer supports a selector value. Elements will be matched by their derived target. You may prevent keeping with [up-on-keep="if(condition) event.preventDefault()"]. '),up.element.setMissingAttr(u,"up-on-keep",`if (!newFragment.matches(${JSON.stringify(t)})) event.preventDefault()`),u.setAttribute("up-keep",""))}))},234:()=>{up.migrate.renamedEvent("up:app:booted","up:framework:booted")},869:()=>{up.history.config.patch((function(e){up.migrate.renamedProperty(e,"popTargets","restoreTargets")})),up.history.url=function(){return up.migrate.deprecated("up.history.url()","up.history.location"),up.history.location},up.migrate.renamedEvent("up:history:push","up:location:changed"),up.migrate.renamedEvent("up:history:pushed","up:location:changed"),up.migrate.renamedEvent("up:history:restore","up:location:changed"),up.migrate.renamedEvent("up:history:restored","up:location:changed"),up.migrate.renamedEvent("up:history:replaced","up:location:changed"),up.migrate.removedEvent("up:fragment:kept","up:fragment:keep"),up.history.config.patch((function(){this.updateMetaTagsValue=this.updateMetaTags,this.updateMetaTagsSet=!1,Object.defineProperty(this,"updateMetaTags",{configurable:!0,get(){return this.updateMetaTagsValue},set(e){this.updateMetaTagsValue=e,this.updateMetaTagsSet=!0}})})),up.on("up:framework:boot",(function(){up.history.config.updateMetaTagsSet||up.migrate.warn("Meta tags in the <head> are now updated automatically. Configure up.history.config.updateMetaTags to remove this warning.")})),up.migrate.warnOfHungryMetaTags=function(e){let u=up.radio.config.selector("hungrySelectors"),t=up.util.filter(e,(e=>e.matches(u)));t.length&&up.migrate.warn("Meta tags in the <head> are now updated automatically. Remove the [up-hungry] attribute from %o.",t)}},905:()=>{up.migrate.handleLayerOptions=function(e){up.migrate.fixKey(e,"flavor","mode"),up.migrate.fixKey(e,"closable","dismissable"),up.migrate.fixKey(e,"closeLabel","dismissLabel"),up.migrate.fixKey(e,"dismissAriaLabel","dismissARIALabel");for(let u of["width","maxWidth","height"])e[u]&&up.migrate.warn(`Layer option { ${u} } has been removed. Use { size } or { class } instead.`);e.sticky&&up.migrate.warn("Layer option { sticky } has been removed. Give links an [up-peel=false] attribute to prevent layer dismissal on click."),e.template&&up.migrate.warn("Layer option { template } has been removed. Use { class } or modify the layer HTML on up:layer:open."),"page"===e.layer&&(up.migrate.warn("Option { layer: 'page' } has been renamed to { layer: 'root' }."),e.layer="root"),"modal"!==e.layer&&"popup"!==e.layer||(up.migrate.warn(`Option { layer: '${e.layer}' } has been removed. Did you mean { layer: 'overlay' }?`),e.layer="overlay"),up.util.isMissing(e.layer)&&up.util.isGiven(e.mode)&&(up.migrate.warn('Opening a layer with only a { mode } option is deprecated. Pass { layer: "new", mode } instead.'),e.layer="new")},up.migrate.handleTetherOptions=function(e){const[u,t]=e.position.split("-");t&&(up.migrate.warn("The position value %o is deprecated. Use %o instead.",e.position,{position:u,align:t}),e.position=u,e.align=t)},up.migrate.registerLayerCloser=e=>e.registerClickCloser("up-close",((u,t)=>{up.migrate.deprecated("[up-close]","[up-dismiss]"),e.dismiss(u,t)})),up.migrate.handleLayerConfig=e=>up.migrate.fixKey(e,"historyVisible","history"),Object.defineProperty(up.Layer.prototype,"historyVisible",{get:function(){return up.migrate.deprecated("up.Layer#historyVisible","up.Layer#history"),this.history}})},969:()=>{const e=up.link.config.selectorFn("followSelectors"),u=up.link.config.selectorFn("preloadSelectors");let t;up.migrate.renamedAttribute("up-flavor","up-mode",{scope:e}),up.migrate.renamedAttribute("up-closable","up-dismissable",{scope:e}),up.migrate.removedAttribute("up-width",{scope:e,replacement:"[up-size] or [up-class]"}),up.migrate.removedAttribute("up-height",{scope:e,replacement:"[up-size] or [up-class]"}),up.migrate.renamedAttribute("up-history-visible","up-history",{scope:e}),up.migrate.renamedAttribute("up-clear-cache","up-expire-cache",{scope:e}),up.migrate.renamedAttribute("up-bad-response-time","up-late-delay"),up.migrate.transformAttribute("up-solo",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-solo] has been replaced with [up-abort="all"]'),e.setAttribute("up-abort","all");break;case"true":up.migrate.warn('Attribute [up-solo="true"] has been replaced with [up-abort="all"]'),e.setAttribute("up-abort","all");break;case"false":up.migrate.warn('Attribute [up-solo="false"] has been replaced with [up-abort="false"]'),up.migrate.warn('Unpoly 3+ only aborts requests targeting the same fragment. Setting [up-solo="false"] may no longer be necessary.'),e.setAttribute("up-abort","false");break;default:up.migrate.warn('Attribute [up-solo] has been renamed to [up-abort] and [up-abort] no longer accepts a URL pattern. Check if you can use [up-abort="target"] instead.'),e.setAttribute("up-abort","target")}})),up.migrate.transformAttribute("up-reveal",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-reveal] has been replaced with [up-scroll="target"]'),e.setAttribute("up-scroll","target");break;case"true":up.migrate.warn('Attribute [up-reveal="true"] has been replaced with [up-scroll="target"]'),e.setAttribute("up-scroll","target");break;case"false":up.migrate.warn('Attribute [up-reveal="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false");break;default:up.migrate.warn('Attribute [up-reveal="%s"] has been replaced with [up-scroll="%s"]',u)}})),up.migrate.transformAttribute("up-reset-scroll",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-reset-scroll] has been replaced with [up-scroll="reset"]'),e.setAttribute("up-scroll","reset");break;case"true":up.migrate.warn('Attribute [up-reset-scroll="true"] has been replaced with [up-scroll="reset"]'),e.setAttribute("up-scroll","reset");break;case"false":up.migrate.warn('Attribute [up-reset-scroll="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false")}})),up.migrate.transformAttribute("up-restore-scroll",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-restore-scroll] has been replaced with [up-scroll="restore"]'),e.setAttribute("up-scroll","restore");break;case"true":up.migrate.warn('Attribute [up-restore-scroll="true"] has been replaced with [up-scroll="restore"]'),e.setAttribute("up-scroll","restore");break;case"false":up.migrate.warn('Attribute [up-restore-scroll="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false")}})),up.migrate.targetMacro("up-dash",{"up-preload":"","up-instant":""},(()=>up.migrate.deprecated("[up-dash]","up.link.config.instantSelectors and up.link.config.preloadSelectors"))),up.migrate.renamedAttribute("up-delay","up-preload-delay",{scope:u}),up.link.config.patch((function(e){e.preloadEnabled=!0,t=up.migrate.removedProperty(e,"preloadEnabled","The configuration up.link.config.preloadEnabled has been removed. To disable preloading, prevent up:link:preload instead.")})),up.on("up:link:preload",(function(e){t[0]||e.preventDefault()}));const p="[up-href]:not([up-follow], [up-poll], [up-defer], [up-expand])";up.link.config.patch((function(e){e.clickableSelectors.push(p),e.followSelectors.push(p)})),up.compiler(p,(function(e){up.migrate.warn("Following links with only [up-href] has been deprecated. You must now also set an [up-follow] on the same link (found in %o).",e)}));const o=`[up-instant]:is(a[href], ${p})`;up.link.config.patch((function(e){e.followSelectors.push(o)})),up.compiler(p,(function(e){up.migrate.warn("Following links with only [up-instant] has been deprecated. You must now also set an [up-follow] on the same link (found in %o).",e)}))},992:()=>{const e=up.util;up.migrate=function(){const u=new up.Config((()=>({logLevel:"warn"})));function t(u,...t){let p=e.extractCallback(t),{scope:o}=e.extractOptions(t),n=o||`[${u}]`;up.macro(n,{priority:-1e3},(function(e){if(e.hasAttribute(u)){let t=e.getAttribute(u);p(e,t)}}))}const p={},o={};function n(e){let u=p[e];if(u)return a(`Event ${e} has been renamed to ${u}`),u;if(e in o){let u=`Event ${e} has been removed`,t=o[e];return t&&(u+=`. Use ${t} instead.`),a(u),e}return e}const r={},a=up.mockable(((t,...p)=>{const o=e.sprintf(t,...p);r[o]||(r[o]=!0,up.log[u.logLevel]("unpoly-migrate",t,...p))})),i=["top","right","bottom","left","padding","padding-top","padding-right","padding-bottom","padding-left","margin","margin-top","margin-right","margin-bottom","margin-left","border-width","border-top-width","border-right-width","border-bottom-width","border-left-width","width","height","max-width","max-height","min-width","min-height"];function s(u){return/[A-Z]/.test(u)?(a(`CSS property names must be in kebab-case, but got camelCase "${u}"`),e.camelToKebabCase(u)):u}function l(e,u,t){return!t&&i.includes(e)&&/^[\d.]+$/.test(u)?(a(`CSS length values must have a unit, but got "${e}: ${u}". Use "${e}: ${u}px" instead.`),u+"px"):u}return{deprecated:function(e,u){a(`${e} has been deprecated. Use ${u} instead.`)},renamedPackage:function(e,u){Object.defineProperty(up,e,{configurable:!0,get:()=>(a(`up.${e} has been renamed to up.${u}`),up[u])})},renamedProperty:function(u,t,p,o){const n=e.memoize((()=>o?a(o):a("Property { %s } has been renamed to { %s } (found in %o)",t,p,u)));Object.defineProperty(u,t,{configurable:!0,get(){return n(),this[p]},set(e){n(),this[p]=e}})},removedProperty:function(u,t,p){const o=e.memoize((()=>p?a(p):a("Property { %s } has been removed without replacement (found in %o)",t,u)));let n=[u[t]];return Object.defineProperty(u,t,{configurable:!0,get:()=>(o(),n[0]),set(e){o(),n[0]=e}}),n},forbiddenPropertyValue:function(e,u,t,p){let o=e[u];Object.defineProperty(e,u,{configurable:!0,get:()=>o,set(e){if(e===t)throw new Error(p);o=e}})},transformAttribute:t,renamedAttribute:function(u,p,{scope:o,mapValue:n}={}){t(u,{scope:o},(function(t,o){a("Attribute [%s] has been renamed to [%s] (found in %o)",u,p,t),n&&(o=e.evalOption(n,o)),t.setAttribute(p,o)}))},removedAttribute:function(e,{scope:u,replacement:p}={}){t(e,{scope:u},(function(u,t){p?a("Attribute [%s] has been removed (found in %o). Use %s instead.",e,u,p):a("Attribute [%s] has been removed without replacement (found in %o)",e,u)}))},formerlyAsync:function(e){const u=Promise.resolve(),t=u.then;return u.then=function(){return a(`${e} no longer returns a promise`),t.apply(this,arguments)},u},renamedEvent:function(e,u){p[e]=u},removedEvent:function(e,u=null){o[e]=u},fixStyleProps:function(u,t){let p;if(e.isString(u))p=s(u);else if(e.isArray(u))p=u.map(s);else if(e.isObject(u)){p={};for(let e in u){let o=u[e];e=s(e),o=l(e,o,t),p[e]=o}}return p},fixEventTypes:function(u){return e.uniq(e.map(u,n))},fixKey:function(u,t,p){e.isDefined(u[t])&&(a("Property { %s } has been renamed to { %s } (found in %o)",t,p,u),e.renameKey(u,t,p))},warn:a,loaded:!0,config:u}}()},413:()=>{const e=new Error("up.modal.flavors has been removed without direct replacement. You may give new layers a { class } or modify layer elements on up:layer:open.");up.modal={visit:(e,u={})=>(up.migrate.deprecated("up.modal.visit(url)",'up.layer.open({ url, mode: "modal" })'),up.layer.open(Object.assign(Object.assign({},u),{url:e,mode:"modal"}))),follow:(e,u={})=>(up.migrate.deprecated("up.modal.follow(link)",'up.follow(link, { layer: "modal" })'),up.follow(e,Object.assign(Object.assign({},u),{layer:"modal"}))),extract:(e,u,t={})=>(up.migrate.deprecated("up.modal.extract(target, document)",'up.layer.open({ document, mode: "modal" })'),up.layer.open(Object.assign(Object.assign({},t),{target:e,html:u,layer:"modal"}))),close:(e={})=>(up.migrate.deprecated("up.modal.close()","up.layer.dismiss()"),up.layer.dismiss(null,e),up.migrate.formerlyAsync("up.layer.dismiss()")),url:()=>(up.migrate.deprecated("up.modal.url()","up.layer.location"),up.layer.location),coveredUrl(){var e;return up.migrate.deprecated("up.modal.coveredUrl()","up.layer.parent.location"),null===(e=up.layer.parent)||void 0===e?void 0:e.location},get config(){return up.migrate.deprecated("up.modal.config","up.layer.config.modal"),up.layer.config.modal},contains:e=>(up.migrate.deprecated("up.modal.contains()","up.layer.contains()"),up.layer.contains(e)),isOpen:()=>(up.migrate.deprecated("up.modal.isOpen()","up.layer.isOverlay()"),up.layer.isOverlay()),get flavors(){throw e},flavor(){throw e}},up.migrate.renamedEvent("up:modal:open","up:layer:open"),up.migrate.renamedEvent("up:modal:opened","up:layer:opened"),up.migrate.renamedEvent("up:modal:close","up:layer:dismiss"),up.migrate.renamedEvent("up:modal:closed","up:layer:dismissed"),up.migrate.targetMacro("up-modal",{"up-layer":"new modal"},(()=>up.migrate.deprecated("[up-modal]",'[up-layer="new modal"]'))),up.migrate.targetMacro("up-drawer",{"up-layer":"new drawer"},(()=>up.migrate.deprecated("[up-drawer]",'[up-layer="new drawer"]')))},885:()=>{const e=up.util;up.migrate.renamedPackage("proxy","network"),up.migrate.renamedEvent("up:proxy:load","up:request:load"),up.migrate.renamedEvent("up:proxy:received","up:request:loaded"),up.migrate.renamedEvent("up:proxy:loaded","up:request:loaded"),up.migrate.renamedEvent("up:proxy:fatal","up:request:offline"),up.migrate.renamedEvent("up:request:fatal","up:request:offline"),up.migrate.renamedEvent("up:proxy:aborted","up:request:aborted"),up.migrate.renamedEvent("up:proxy:slow","up:network:late"),up.migrate.renamedEvent("up:proxy:recover","up:network:recover"),up.migrate.renamedEvent("up:request:late","up:network:late"),up.migrate.renamedEvent("up:request:recover","up:network:recover"),up.network.config.patch((function(e){const u=()=>up.migrate.deprecated("up.proxy.config.preloadDelay","up.link.config.preloadDelay");Object.defineProperty(e,"preloadDelay",{configurable:!0,get:()=>(u(),up.link.config.preloadDelay),set(e){u(),up.link.config.preloadDelay=e}})})),up.network.config.patch((function(e){up.migrate.renamedProperty(e,"maxRequests","concurrency"),up.migrate.renamedProperty(e,"slowDelay","lateDelay"),up.migrate.renamedProperty(e,"cacheExpiry","cacheExpireAge",'The configuration up.network.config.cacheExpiry has been renamed to up.network.config.cacheExpireAge. Note that Unpoly 3+ automatically reloads cached content after rendering to ensure users always see fresh data ("cache revalidation"). Setting a custom expiry may no longer be necessary.'),up.migrate.renamedProperty(e,"clearCache","expireCache"),up.migrate.forbiddenPropertyValue(e,"cacheSize",0,"Disabling the cache with up.network.config.cacheSize = 0 is no longer supported. To disable automatic caching during navigation, set up.fragment.config.navigateOptions.cache = false instead."),up.network.config.requestMetaKeys=[],up.migrate.removedProperty(e,"requestMetaKeys","The configuration up.network.config.requestMetaKeys has been removed. Servers that optimize responses based on request headers should instead set a Vary response header.")})),up.migrate.handleRequestOptions=function(e){up.migrate.fixKey(e,"clearCache","expireCache"),e.solo&&up.migrate.warn("The option up.request({ solo }) has been removed. Use up.network.abort() or up.fragment.abort() instead.")},up.ajax=function(...e){return up.migrate.deprecated("up.ajax()","up.request()"),up.request(...e).then((e=>e.text))},up.network.clear=function(){up.migrate.deprecated("up.proxy.clear()","up.cache.expire()"),up.cache.expire()},up.Request.Cache.prototype.clear=function(...e){up.migrate.deprecated("up.cache.clear()","up.cache.expire()"),this.expire(...e)},up.network.preload=function(...e){return up.migrate.deprecated("up.proxy.preload(link)","up.link.preload(link)"),up.link.preload(...e)},up.migrate.preprocessAbortArgs=function(u){2===u.length&&e.isString(u[1])&&(up.migrate.warn("up.network.abort() no longer takes a reason as a second argument. Pass it as { reason } option instead."),u[1]={reason:u[1]})},up.network.isIdle=function(){return up.migrate.deprecated("up.network.isIdle()","!up.network.isBusy()"),!up.network.isBusy()},up.Request.prototype.navigate=function(){up.migrate.deprecated("up.Request#navigate()","up.Request#loadPage()"),this.loadPage()},up.migrate.renamedProperty(up.Request.prototype,"preload","background"),up.migrate.renamedProperty(up.Request.prototype,"badResponseTime","lateDelay"),up.Response.prototype.isSuccess=function(){return up.migrate.deprecated("up.Response#isSuccess()","up.Response#ok"),this.ok},up.Response.prototype.getHeader=function(e){return up.migrate.deprecated("up.Response#getHeader()","up.Response#header()"),this.header(e)},up.Response.prototype.isError=function(){return up.migrate.deprecated("up.Response#isError()","!up.Response#ok"),!this.ok};const u=up.network.config.progressBar;up.network.config.patch((function(t){t.progressBar=function(){return function(){const u=up.EventListener.allNonDefault(document);return e.find(u,(e=>"up:network:late"===e.eventType))}()?(up.migrate.warn("Disabled the default progress bar as may have built a custom loading indicator with your up:network:late listener. Please set up.network.config.progressBar to true or false."),!1):u}})),up.network.shouldReduceRequests=function(){return up.migrate("up.network.shouldReduceRequests() has been removed without replacement"),!1},up.network.config.patch((function(e){up.migrate.removedProperty(e,"badRTT"),up.migrate.removedProperty(e,"badDownlink"),up.migrate.renamedProperty(e,"badResponseTime","lateDelay")}))},69:()=>{up.popup={attach:(e,u={})=>(e=up.fragment.get(e),up.migrate.deprecated("up.popup.attach(origin)","up.layer.open({ origin, layer: 'popup' })"),up.layer.open(Object.assign(Object.assign({},u),{origin:e,layer:"popup"}))),close:(e={})=>(up.migrate.deprecated("up.popup.close()","up.layer.dismiss()"),up.layer.dismiss(null,e),up.migrate.formerlyAsync("up.layer.dismiss()")),url:()=>(up.migrate.deprecated("up.popup.url()","up.layer.location"),up.layer.location),coveredUrl(){var e;return up.migrate.deprecated("up.popup.coveredUrl()","up.layer.parent.location"),null===(e=up.layer.parent)||void 0===e?void 0:e.location},get config(){return up.migrate.deprecated("up.popup.config","up.layer.config.popup"),up.layer.config.popup},contains:e=>(up.migrate.deprecated("up.popup.contains()","up.layer.contains()"),up.layer.contains(e)),isOpen:()=>(up.migrate.deprecated("up.popup.isOpen()","up.layer.isOverlay()"),up.layer.isOverlay()),sync:()=>(up.migrate.deprecated("up.popup.sync()","up.layer.sync()"),up.layer.sync())},up.migrate.renamedEvent("up:popup:open","up:layer:open"),up.migrate.renamedEvent("up:popup:opened","up:layer:opened"),up.migrate.renamedEvent("up:popup:close","up:layer:dismiss"),up.migrate.renamedEvent("up:popup:closed","up:layer:dismissed"),up.migrate.targetMacro("up-popup",{"up-layer":"new popup"},(()=>up.migrate.deprecated("[up-popup]",'[up-layer="new popup"]')))},677:()=>{up.migrate.clearCacheFromXHR=function(e){let u=e.getResponseHeader("X-Up-Clear-Cache");if(u)return up.migrate.deprecated("X-Up-Clear-Cache","X-Up-Expire-Cache"),"false"!==u&&u},up.migrate.titleFromXHR=function(e){let u=e.getResponseHeader("X-Up-Title");if(u){if("false"===u)return!1;if('"'!==u[0]&&"'"!==u[0])return up.migrate.warn("X-Up-Title must now be a JSON-encoded string"),u}}},228:()=>{const e=up.element;let u;up.radio.config.patch((function(e){up.migrate.renamedProperty(e,"hungry","hungrySelectors")})),up.radio.config.pollEnabled=!0,up.radio.config.patch((function(e){u=up.migrate.removedProperty(e,"pollEnabled","The configuration up.radio.config.pollEnabled has been removed. To disable polling, prevent up:fragment:poll instead.")})),up.on("up:fragment:poll",(function(e){u[0]||e.preventDefault()})),up.compiler("[up-hungry][up-if-history]",(function(u){e.booleanAttr(u,"up-if-history")&&u.addEventListener("up:fragment:hungry",(function(e){e.renderOptions.history||e.preventDefault()}))}))},771:()=>{const e=up.util,u=up.element;up.migrate.renamedPackage("syntax","script"),up.migrate.postCompile=function(u,t){let p;if(p=t.keep){up.migrate.warn("The { keep: true } option for up.compiler() has been removed. Have the compiler set [up-keep] attribute instead.");const t=e.isString(p)?p:"";for(let e of u)e.setAttribute("up-keep",t)}},up.migrate.targetMacro=function(t,p,o){up.macro(`[${t}]`,(function(n){let r;const a=e.copy(p);(r=n.getAttribute(t))?a["up-target"]=r:a["up-follow"]="",u.setMissingAttrs(n,a),n.removeAttribute(t),null==o||o()}))},up.$compiler=function(...e){up.migrate.warn("up.$compiler() has been deprecated. Instead use up.compiler() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return up.compiler(...e,(function(e,...t){let p=jQuery(e);return u(p,...t)}))},up.$macro=function(...e){up.migrate.warn("up.$macro() has been deprecated. Instead use up.macro() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return up.macro(...e,(function(e,...t){let p=jQuery(e);return u(p,...t)}))},up.migrate.processCompilerPassMeta=function(e,u){Object.defineProperty(e,"response",{get:()=>(up.migrate.warn("Accessing meta.response from a compiler has been deprecated without replacement. Avoid fragments that compile differently for the initial page load vs. subsequent fragment updates."),u)})}},163:()=>{up.migrate.renamedPackage("navigation","status"),up.migrate.renamedPackage("feedback","status"),up.status.config.patch((function(e){up.migrate.renamedProperty(e,"navs","navSelectors")}))},197:()=>{up.macro("[up-tooltip]",(function(e){up.migrate.warn("[up-tooltip] has been deprecated. A [title] was set instead."),up.element.setMissingAttr(e,"title",e.getAttribute("up-tooltip"))}))},480:()=>{up.util.only=function(e,...u){return up.migrate.deprecated("up.util.only(object, ...keys)","up.util.pick(object, keys)"),up.util.pick(e,u)},up.util.except=function(e,...u){return up.migrate.deprecated("up.util.except(object, ...keys)","up.util.omit(object, keys)"),up.util.omit(e,u)},up.util.parseUrl=function(...e){return up.migrate.deprecated("up.util.parseUrl()","up.util.parseURL()"),up.util.parseURL(...e)},up.util.any=function(...e){return up.migrate.deprecated("up.util.any()","up.util.some()"),up.util.some(...e)},up.util.all=function(...e){return up.migrate.deprecated("up.util.all()","up.util.every()"),up.util.every(...e)},up.util.detect=function(...e){return up.migrate.deprecated("up.util.detect()","up.util.find()"),up.util.find(...e)},up.util.select=function(...e){return up.migrate.deprecated("up.util.select()","up.util.filter()"),up.util.filter(...e)},up.util.setTimer=function(...e){return up.migrate.deprecated("up.util.setTimer()","up.util.timer()"),up.util.timer(...e)},up.util.escapeHtml=function(...e){return up.migrate.deprecated("up.util.escapeHtml()","up.util.escapeHTML()"),up.util.escapeHTML(...e)},up.util.selectorForElement=function(...e){return up.migrate.deprecated("up.util.selectorForElement()","up.fragment.toTarget()"),up.fragment.toTarget(...e)},up.util.nextFrame=function(...e){return up.migrate.deprecated("up.util.nextFrame()","up.util.task()"),up.util.task(...e)},up.util.times=function(e,u){up.migrate.deprecated("up.util.times()","a `for` loop");for(let t=0;t<e;t++)u()},up.util.assign=function(...e){return up.migrate.deprecated("up.util.assign()","Object.assign()"),Object.assign(...e)},up.util.values=function(...e){return up.migrate.deprecated("up.util.values()","Object.values()"),Object.values(...e)},up.util.microtask=window.queueMicrotask,up.migrate.splitAtOr=function(e){let u=e.split(/\s+or\s+/);if(u.length>=2)return up.migrate.warn(`Separating tokens by \`or\` has been deprecated. Use a comma (\`,\`) instead. Found in "${e}".`),u}},338:()=>{up.migrate.renamedPackage("layout","viewport"),up.viewport.config.patch((function(e){up.migrate.renamedProperty(e,"viewports","viewportSelectors"),up.migrate.renamedProperty(e,"fixedTop","fixedTopSelectors"),up.migrate.renamedProperty(e,"fixedBottom","fixedBottomSelectors"),up.migrate.renamedProperty(e,"anchoredRight","anchoredRightSelectors"),up.migrate.renamedProperty(e,"snap","revealSnap"),up.migrate.removedProperty(e,"scrollSpeed")})),up.viewport.closest=function(...e){return up.migrate.deprecated("up.viewport.closest()","up.viewport.get()"),up.viewport.get(...e)},up.viewport.scroll=function(e,u,t={}){return up.migrate.deprecated("up.scroll()","Element#scrollTo()"),(e=up.fragment.get(e,t)).scrollTo(Object.assign(Object.assign({},t),{top:u})),up.migrate.formerlyAsync("up.scroll()")},up.scroll=up.viewport.scroll}},u={};function t(p){var o=u[p];if(void 0!==o)return o.exports;var n=u[p]={exports:{}};return e[p](n,n.exports,t),n.exports}up.framework.startExtension(),t(992),t(390),t(480),t(937),t(294),t(700),t(394),t(771),t(305),t(354),t(234),t(869),t(163),t(969),t(905),t(413),t(69),t(197),t(677),t(885),t(228),t(338),up.framework.stopExtension()})();
         
     | 
| 
      
 1 
     | 
    
         
            +
            (()=>{var e={294:()=>{up.browser.loadPage=function(...e){return up.migrate.deprecated("up.browser.loadPage()","up.network.loadPage()"),up.network.loadPage(...e)},up.browser.isSupported=function(...e){return up.migrate.deprecated("up.browser.isSupported()","up.framework.isSupported()"),up.framework.isSupported(...e)}},390:()=>{up.Config.prototype.patch=function(e){let u=e.bind(this,this);u(),document.addEventListener("up:framework:reset",u)}},700:()=>{up.element.first=function(...e){return up.migrate.deprecated("up.element.first()","up.element.get()"),up.element.get(...e)},up.element.createFromHtml=function(...e){return up.migrate.deprecated("up.element.createFromHtml()","up.element.createFromHTML()"),up.element.createFromHTML(...e)},up.element.remove=function(e){return up.migrate.deprecated("up.element.remove()","Element#remove()"),e.remove()},up.element.matches=function(e,u){return up.migrate.deprecated("up.element.matches()","Element#matches()"),e.matches(u)},up.element.closest=function(e,u){return up.migrate.deprecated("up.element.closest()","Element#closest()"),e.closest(u)},up.element.replace=function(e,u){return up.migrate.deprecated("up.element.replace()","Element#replaceWith()"),e.replaceWith(u)},up.element.all=function(...e){up.migrate.deprecated("up.element.all()","Document#querySelectorAll() or Element#querySelectorAll()");const u=e.pop();return(e[0]||document).querySelectorAll(u)},up.element.toggleClass=function(e,u,t){up.migrate.deprecated("up.element.toggleClass()","element.classList.toggle()");const p=e.classList;return null==t&&(t=!p.contains(u)),t?p.add(u):p.remove(u)},up.element.toSelector=function(...e){return up.migrate.deprecated("up.element.toSelector()","up.fragment.toTarget()"),up.fragment.toTarget(...e)},up.element.isAttached=function(e){return up.migrate.deprecated("up.element.isAttached()","document.contains(element)"),document.contains(e)},up.element.isDetached=function(e){return up.migrate.deprecated("up.element.isDetached()","!document.contains(element)"),!up.element.isAttached(e)}},937:()=>{class DeprecatedCannotCompile extends up.Error{}Object.defineProperty(up,"CannotCompile",{get:function(){return up.migrate.warn('The error up.CannotCompile is no longer thrown. Compiler errors now emit an "error" event on window, but no longer crash the render pass.'),DeprecatedCannotCompile}})},394:()=>{up.migrate.renamedPackage("bus","event"),up.event.nobodyPrevents=function(...e){return up.migrate.deprecated("up.event.nobodyPrevents(type)","!up.emit(type).defaultPrevented"),!up.emit(...e).defaultPrevented},up.$on=function(...e){up.migrate.warn("up.$on() has been deprecated. Instead use up.on() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return u.upNativeCallback=function(e,t,p){let o=jQuery(t);u.call(o,e,o,p)},up.on(...e,u.upNativeCallback)},up.$off=function(...e){up.migrate.deprecated("up.$off()","up.off()");let u=e.pop().upNativeCallback;return u||up.fail("The callback passed to up.$off() was never registered with up.$on()"),up.off(...e,u)}},305:()=>{up.form.config.patch((function(e){up.migrate.renamedProperty(e,"fields","fieldSelectors"),up.migrate.renamedProperty(e,"submitButtons","submitButtonSelectors"),up.migrate.renamedProperty(e,"validateTargets","groupSelectors"),up.migrate.renamedProperty(e,"observeDelay","watchInputDelay")})),up.migrate.migratedFormGroupSelectors=function(){return up.form.config.groupSelectors.map((e=>{let u=e.replace(/:has\((:origin|&)\)$/,"");return e!==u&&up.migrate.warn('Selectors in up.form.config.groupSelectors must not contain ":has(:origin)". The suffix is added automatically where required. Found in "%s".',e),u}))},up.migrate.watchForSwitch=function(e,u){if(e.matches("input[type=radio]"))return up.migrate.warn("Using [up-switch] on an individual radio button is deprecated (%o). Use [up-switch] on the container of a radio group instead.",e),up.on(e,"change",u)},up.migrate.checkedRadioButtonForSwitch=function(e){const u=up.form.getRegion(e),t=e.getAttribute("name"),p="input[type=radio]"+up.element.attrSelector("name",t);return u.querySelector(p+":checked")},up.migrate.renamedAttribute("up-observe","up-watch"),up.migrate.renamedAttribute("up-fieldset","up-form-group"),up.migrate.renamedAttribute("up-delay","up-watch-delay",{scope:"[up-autosubmit]"}),up.migrate.renamedAttribute("up-delay","up-watch-delay",{scope:"[up-watch]"}),up.observe=function(...e){if(up.migrate.deprecated("up.observe()","up.watch()"),up.util.isList(e[0])&&e[0].length>1){let u=e.shift();up.migrate.warn("Calling up.observe() with a list of multiple elements is no longer supported by up.watch()");let t=up.util.map(u,(u=>up.watch(u,...e)));return up.util.sequence(t)}return up.watch(...e)}},354:()=>{const e=up.util;up.migrate.renamedPackage("flow","fragment"),up.migrate.renamedPackage("dom","fragment"),up.fragment.config.patch((function(e){up.migrate.renamedProperty(e,"fallbacks","mainTargets")})),up.migrate.handleResponseDocOptions=e=>up.migrate.fixKey(e,"html","document"),up.fragment.config.patch((function(e){let u=()=>up.migrate.deprecated("up.fragment.config.matchAroundOrigin","up.fragment.config.match");Object.defineProperty(e,"matchAroundOrigin",{configurable:!0,get:function(){return u(),"closest"===this.match},set:function(e){u(),this.match=e?"region":"first"}})})),up.replace=function(e,u,t){return up.migrate.deprecated("up.replace(target, url)","up.navigate(target, { url })"),up.navigate(Object.assign(Object.assign({},t),{target:e,url:u}))},up.extract=function(e,u,t){return up.migrate.deprecated("up.extract(target, document)","up.navigate(target, { document })"),up.navigate(Object.assign(Object.assign({},t),{target:e,document:u}))},up.fragment.first=function(...e){return up.migrate.deprecated("up.fragment.first()","up.fragment.get()"),up.fragment.get(...e)},up.first=up.fragment.first,up.migrate.preprocessRenderOptions=function(u){e.isString(u.history)&&"auto"!==u.history&&(up.migrate.warn("Passing a URL as { history } option is deprecated. Pass it as { location } instead."),u.location=u.history,u.history="auto");for(let t of["target","origin"])e.isJQuery(u[t])&&(up.migrate.warn("Passing a jQuery collection as { %s } is deprecated. Pass it as a native element instead.",t),u[t]=up.element.get(u[t]));"auto"===u.fail&&(up.migrate.warn("The option { fail: 'auto' } is deprecated. Omit the option instead."),delete u.fail);let t=e.pluckKey(u,"solo");e.isString(t)?(up.migrate.warn("The up.render() option { solo } has been replaced with { abort } and { abort } no longer accepts a URL pattern. Check if you can use { abort: 'target'} or use up.network.abort(pattern) instead."),u.abort=e=>up.network.abort(t,e)):e.isFunction(t)?(up.migrate.warn("The up.render() option { solo } has been replaced with { abort } and { abort } no longer accepts a Function(up.Request): boolean. Check if you can use { abort: 'target'} or use up.network.abort(fn) instead."),u.abort=e=>{up.network.abort(t,e)}):!0===t?(up.migrate.deprecated("Option { solo: true }","{ abort: 'all' }"),u.abort="all"):!1===t&&(up.migrate.deprecated("Option { solo: false }","{ abort: false }"),up.migrate.warn("Unpoly 3+ only aborts requests targeting the same fragment. Setting { solo: false } may no longer be necessary."),u.abort=!1),up.migrate.fixKey(u,"failOnFinished","onFailFinished"),up.migrate.fixKey(u,"badResponseTime","lateDelay"),e.isString(u.reveal)?(up.migrate.deprecated(`Option { reveal: '${u.reveal}' }`,`{ scroll: '${u.reveal}' }`),u.scroll=u.reveal):!0===u.reveal?(up.migrate.deprecated("Option { reveal: true }","{ scroll: 'target' }"),u.scroll="target"):!1===u.reveal&&(up.migrate.deprecated("Option { reveal: false }","{ scroll: false }"),u.scroll=!1),!0===u.resetScroll&&(up.migrate.deprecated("Option { resetScroll: true }","{ scroll: 'top' }"),u.scroll="reset"),!1===u.resetScroll&&(up.migrate.deprecated("Option { resetScroll: false }","{ scroll: false }"),u.scroll=!1),!0===u.restoreScroll&&(up.migrate.deprecated("Option { restoreScroll: true }","{ scroll: 'restore' }"),u.scroll="restore"),!1===u.restoreScroll&&(up.migrate.deprecated("Option { restoreScroll: false }","{ scroll: false }"),u.scroll=!1),"reset"===u.scroll&&(up.migrate.deprecated("Option { scroll: 'reset'' }","{ scroll: 'top' }"),u.scroll="top")},up.migrate.postprocessReloadOptions=function(e){var u;let t,p=null===(u=e.headers)||void 0===u?void 0:u["If-Modified-Since"];t=p?Math.floor(.001*new Date(p)).toString():"0",e.headers[up.protocol.headerize("reloadFromTime")]=t},up.migrate.resolveOrigin=function(e,{origin:u}={}){return e.replace(/"[^"]*"|'[^']*'|&|:origin\b/g,(function(t){return":origin"!==t&&"&"!==t?t:("&"===t&&up.migrate.deprecated("Origin shorthand '&'",":origin"),u?up.fragment.toTarget(u):void up.fail('Missing { origin } element to resolve "%s" reference (found in %s)',t,e))}))},up.migrate.removedEvent("up:fragment:kept","up:fragment:keep"),up.fragment.config.patch((function(){this.runScriptsValue=this.runScripts,this.runScriptsSet=!1,Object.defineProperty(this,"runScripts",{configurable:!0,get(){return this.runScriptsValue},set(e){this.runScriptsValue=e,this.runScriptsSet=!0}})})),up.on("up:framework:boot",(function(){up.fragment.config.runScriptsSet||up.migrate.warn("Scripts within fragments are no longer executed. Configure up.fragment.config.runScripts to remove this warning.")})),up.compiler("[up-keep]",(function(u){let t=up.element.booleanOrStringAttr(u,"up-keep");e.isString(t)&&(up.migrate.warn('The [up-keep] attribute no longer supports a selector value. Elements will be matched by their derived target. You may prevent keeping with [up-on-keep="if(condition) event.preventDefault()"]. '),up.element.setMissingAttr(u,"up-on-keep",`if (!newFragment.matches(${JSON.stringify(t)})) event.preventDefault()`),u.setAttribute("up-keep",""))}))},234:()=>{up.migrate.renamedEvent("up:app:booted","up:framework:booted")},869:()=>{up.history.config.patch((function(e){up.migrate.renamedProperty(e,"popTargets","restoreTargets")})),up.history.url=function(){return up.migrate.deprecated("up.history.url()","up.history.location"),up.history.location},up.migrate.renamedEvent("up:history:push","up:location:changed"),up.migrate.renamedEvent("up:history:pushed","up:location:changed"),up.migrate.renamedEvent("up:history:restore","up:location:changed"),up.migrate.renamedEvent("up:history:restored","up:location:changed"),up.migrate.renamedEvent("up:history:replaced","up:location:changed"),up.migrate.prepareLocationChangedEvent=function(e){up.migrate.renamedProperty(e,"url","location")},up.history.config.patch((function(){this.updateMetaTagsValue=this.updateMetaTags,this.updateMetaTagsSet=!1,Object.defineProperty(this,"updateMetaTags",{configurable:!0,get(){return this.updateMetaTagsValue},set(e){this.updateMetaTagsValue=e,this.updateMetaTagsSet=!0}})})),up.on("up:framework:boot",(function(){up.history.config.updateMetaTagsSet||up.migrate.warn("Meta tags in the <head> are now updated automatically. Configure up.history.config.updateMetaTags to remove this warning.")})),up.migrate.warnOfHungryMetaTags=function(e){let u=up.radio.config.selector("hungrySelectors"),t=up.util.filter(e,(e=>e.matches(u)));t.length&&up.migrate.warn("Meta tags in the <head> are now updated automatically. Remove the [up-hungry] attribute from %o.",t)}},905:()=>{up.migrate.handleLayerOptions=function(e){up.migrate.fixKey(e,"flavor","mode"),up.migrate.fixKey(e,"closable","dismissable"),up.migrate.fixKey(e,"closeLabel","dismissLabel"),up.migrate.fixKey(e,"dismissAriaLabel","dismissARIALabel");for(let u of["width","maxWidth","height"])e[u]&&up.migrate.warn(`Layer option { ${u} } has been removed. Use { size } or { class } instead.`);e.sticky&&up.migrate.warn("Layer option { sticky } has been removed. Give links an [up-peel=false] attribute to prevent layer dismissal on click."),e.template&&up.migrate.warn("Layer option { template } has been removed. Use { class } or modify the layer HTML on up:layer:open."),"page"===e.layer&&(up.migrate.warn("Option { layer: 'page' } has been renamed to { layer: 'root' }."),e.layer="root"),"modal"!==e.layer&&"popup"!==e.layer||(up.migrate.warn(`Option { layer: '${e.layer}' } has been removed. Did you mean { layer: 'overlay' }?`),e.layer="overlay"),up.util.isMissing(e.layer)&&up.util.isGiven(e.mode)&&(up.migrate.warn('Opening a layer with only a { mode } option is deprecated. Pass { layer: "new", mode } instead.'),e.layer="new")},up.migrate.handleTetherOptions=function(e){const[u,t]=e.position.split("-");t&&(up.migrate.warn("The position value %o is deprecated. Use %o instead.",e.position,{position:u,align:t}),e.position=u,e.align=t)},up.migrate.registerLayerCloser=e=>e.registerAttrCloser("up-close",((u,t)=>{up.migrate.deprecated("[up-close]","[up-dismiss]"),e.dismiss(u,t)})),up.migrate.handleLayerConfig=e=>up.migrate.fixKey(e,"historyVisible","history"),Object.defineProperty(up.Layer.prototype,"historyVisible",{get:function(){return up.migrate.deprecated("up.Layer#historyVisible","up.Layer#history"),this.history}})},969:()=>{const e=up.link.config.selectorFn("followSelectors"),u=up.link.config.selectorFn("preloadSelectors");let t;up.migrate.renamedAttribute("up-flavor","up-mode",{scope:e}),up.migrate.renamedAttribute("up-closable","up-dismissable",{scope:e}),up.migrate.removedAttribute("up-width",{scope:e,replacement:"[up-size] or [up-class]"}),up.migrate.removedAttribute("up-height",{scope:e,replacement:"[up-size] or [up-class]"}),up.migrate.renamedAttribute("up-history-visible","up-history",{scope:e}),up.migrate.renamedAttribute("up-clear-cache","up-expire-cache",{scope:e}),up.migrate.renamedAttribute("up-bad-response-time","up-late-delay"),up.migrate.transformAttribute("up-solo",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-solo] has been replaced with [up-abort="all"]'),e.setAttribute("up-abort","all");break;case"true":up.migrate.warn('Attribute [up-solo="true"] has been replaced with [up-abort="all"]'),e.setAttribute("up-abort","all");break;case"false":up.migrate.warn('Attribute [up-solo="false"] has been replaced with [up-abort="false"]'),up.migrate.warn('Unpoly 3+ only aborts requests targeting the same fragment. Setting [up-solo="false"] may no longer be necessary.'),e.setAttribute("up-abort","false");break;default:up.migrate.warn('Attribute [up-solo] has been renamed to [up-abort] and [up-abort] no longer accepts a URL pattern. Check if you can use [up-abort="target"] instead.'),e.setAttribute("up-abort","target")}})),up.migrate.transformAttribute("up-reveal",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-reveal] has been replaced with [up-scroll="target"]'),e.setAttribute("up-scroll","target");break;case"true":up.migrate.warn('Attribute [up-reveal="true"] has been replaced with [up-scroll="target"]'),e.setAttribute("up-scroll","target");break;case"false":up.migrate.warn('Attribute [up-reveal="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false");break;default:up.migrate.warn('Attribute [up-reveal="%s"] has been replaced with [up-scroll="%s"]',u)}})),up.migrate.transformAttribute("up-reset-scroll",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-reset-scroll] has been replaced with [up-scroll="top"]'),e.setAttribute("up-scroll","top");break;case"true":up.migrate.warn('Attribute [up-reset-scroll="true"] has been replaced with [up-scroll="top"]'),e.setAttribute("up-scroll","top");break;case"false":up.migrate.warn('Attribute [up-reset-scroll="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false")}})),up.migrate.transformAttribute("up-restore-scroll",(function(e,u){switch(u){case"":up.migrate.warn('Attribute [up-restore-scroll] has been replaced with [up-scroll="restore"]'),e.setAttribute("up-scroll","restore");break;case"true":up.migrate.warn('Attribute [up-restore-scroll="true"] has been replaced with [up-scroll="restore"]'),e.setAttribute("up-scroll","restore");break;case"false":up.migrate.warn('Attribute [up-restore-scroll="false"] has been replaced with [up-scroll="false"]'),e.setAttribute("up-scroll","false")}})),up.migrate.targetMacro("up-dash",{"up-preload":"","up-instant":""},(()=>up.migrate.deprecated("[up-dash]","up.link.config.instantSelectors and up.link.config.preloadSelectors"))),up.migrate.renamedAttribute("up-delay","up-preload-delay",{scope:u}),up.link.config.patch((function(e){e.preloadEnabled=!0,t=up.migrate.removedProperty(e,"preloadEnabled","The configuration up.link.config.preloadEnabled has been removed. To disable preloading, prevent up:link:preload instead.")})),up.on("up:link:preload",(function(e){t[0]||e.preventDefault()}));const p="[up-href]:not([up-follow], [up-poll], [up-defer], [up-expand])";up.link.config.patch((function(e){e.clickableSelectors.push(p),e.followSelectors.push(p)})),up.compiler(p,(function(e){up.migrate.warn("Following links with only [up-href] has been deprecated. You must now also set an [up-follow] on the same link (found in %o).",e)}));const o=`[up-instant]:is(a[href], ${p})`;up.link.config.patch((function(e){e.followSelectors.push(o)})),up.compiler(p,(function(e){up.migrate.warn("Following links with only [up-instant] has been deprecated. You must now also set an [up-follow] on the same link (found in %o).",e)}))},992:()=>{const e=up.util;up.migrate=function(){const u=new up.Config((()=>({logLevel:"warn"})));function t(u,...t){let p=e.extractCallback(t),{scope:o}=e.extractOptions(t),n=o||`[${u}]`;up.macro(n,{priority:-1e3},(function(e){if(e.hasAttribute(u)){let t=e.getAttribute(u);p(e,t)}}))}const p={},o={};function n(e){let u=p[e];if(u)return a(`Event ${e} has been renamed to ${u}`),u;if(e in o){let u=`Event ${e} has been removed`,t=o[e];return t&&(u+=`. Use ${t} instead.`),a(u),e}return e}let r={};const a=up.mockable(((t,...p)=>{const o=e.sprintf(t,...p),n=u.logLevel;"none"===n||r[o]||(r[o]=!0,up.log[n]("unpoly-migrate",t,...p))})),i=["top","right","bottom","left","padding","padding-top","padding-right","padding-bottom","padding-left","margin","margin-top","margin-right","margin-bottom","margin-left","border-width","border-top-width","border-right-width","border-bottom-width","border-left-width","width","height","max-width","max-height","min-width","min-height"];function s(u){return/[A-Z]/.test(u)?(a(`CSS property names must be in kebab-case, but got camelCase "${u}"`),e.camelToKebabCase(u)):u}function l(e,u,t){return!t&&i.includes(e)&&/^[\d.]+$/.test(u)?(a(`CSS length values must have a unit, but got "${e}: ${u}". Use "${e}: ${u}px" instead.`),u+"px"):u}return up.on("up:framework:reset",(function(){r={}})),{deprecated:function(e,u){a(`${e} has been deprecated. Use ${u} instead.`)},renamedPackage:function(e,u){Object.defineProperty(up,e,{configurable:!0,get:()=>(a(`up.${e} has been renamed to up.${u}`),up[u])})},renamedProperty:function(u,t,p,o){const n=e.memoize((()=>o?a(o):a("Property { %s } has been renamed to { %s } (found in %o)",t,p,u)));Object.defineProperty(u,t,{configurable:!0,get(){return n(),this[p]},set(e){n(),this[p]=e}})},removedProperty:function(u,t,p){const o=e.memoize((()=>p?a(p):a("Property { %s } has been removed without replacement (found in %o)",t,u)));let n=[u[t]];return Object.defineProperty(u,t,{configurable:!0,get:()=>(o(),n[0]),set(e){o(),n[0]=e}}),n},forbiddenPropertyValue:function(e,u,t,p){let o=e[u];Object.defineProperty(e,u,{configurable:!0,get:()=>o,set(e){if(e===t)throw new Error(p);o=e}})},transformAttribute:t,renamedAttribute:function(u,p,{scope:o,mapValue:n}={}){t(u,{scope:o},(function(t,o){a("Attribute [%s] has been renamed to [%s] (found in %o)",u,p,t),n&&(o=e.evalOption(n,o)),t.setAttribute(p,o)}))},removedAttribute:function(e,{scope:u,replacement:p}={}){t(e,{scope:u},(function(u,t){p?a("Attribute [%s] has been removed (found in %o). Use %s instead.",e,u,p):a("Attribute [%s] has been removed without replacement (found in %o)",e,u)}))},formerlyAsync:function(e){const u=Promise.resolve(),t=u.then;return u.then=function(){return a(`${e} no longer returns a promise`),t.apply(this,arguments)},u},renamedEvent:function(e,u){p[e]=u},removedEvent:function(e,u=null){o[e]=u},fixStyleProps:function(u,t){let p;if(e.isString(u))p=s(u);else if(e.isArray(u))p=u.map(s);else if(e.isObject(u)){p={};for(let e in u){let o=u[e];e=s(e),o=l(e,o,t),p[e]=o}}return p},fixEventTypes:function(u){return e.uniq(e.map(u,n))},fixKey:function(u,t,p){e.isDefined(u[t])&&(a("Property { %s } has been renamed to { %s } (found in %o)",t,p,u),e.renameKey(u,t,p))},warn:a,loaded:!0,config:u}}()},413:()=>{const e=new Error("up.modal.flavors has been removed without direct replacement. You may give new layers a { class } or modify layer elements on up:layer:open.");up.modal={visit:(e,u={})=>(up.migrate.deprecated("up.modal.visit(url)",'up.layer.open({ url, mode: "modal" })'),up.layer.open(Object.assign(Object.assign({},u),{url:e,mode:"modal"}))),follow:(e,u={})=>(up.migrate.deprecated("up.modal.follow(link)",'up.follow(link, { layer: "modal" })'),up.follow(e,Object.assign(Object.assign({},u),{layer:"modal"}))),extract:(e,u,t={})=>(up.migrate.deprecated("up.modal.extract(target, document)",'up.layer.open({ document, mode: "modal" })'),up.layer.open(Object.assign(Object.assign({},t),{target:e,html:u,layer:"modal"}))),close:(e={})=>(up.migrate.deprecated("up.modal.close()","up.layer.dismiss()"),up.layer.dismiss(null,e),up.migrate.formerlyAsync("up.layer.dismiss()")),url:()=>(up.migrate.deprecated("up.modal.url()","up.layer.location"),up.layer.location),coveredUrl(){var e;return up.migrate.deprecated("up.modal.coveredUrl()","up.layer.parent.location"),null===(e=up.layer.parent)||void 0===e?void 0:e.location},get config(){return up.migrate.deprecated("up.modal.config","up.layer.config.modal"),up.layer.config.modal},contains:e=>(up.migrate.deprecated("up.modal.contains()","up.layer.contains()"),up.layer.contains(e)),isOpen:()=>(up.migrate.deprecated("up.modal.isOpen()","up.layer.isOverlay()"),up.layer.isOverlay()),get flavors(){throw e},flavor(){throw e}},up.migrate.renamedEvent("up:modal:open","up:layer:open"),up.migrate.renamedEvent("up:modal:opened","up:layer:opened"),up.migrate.renamedEvent("up:modal:close","up:layer:dismiss"),up.migrate.renamedEvent("up:modal:closed","up:layer:dismissed"),up.migrate.targetMacro("up-modal",{"up-layer":"new modal"},(()=>up.migrate.deprecated("[up-modal]",'[up-layer="new modal"]'))),up.migrate.targetMacro("up-drawer",{"up-layer":"new drawer"},(()=>up.migrate.deprecated("[up-drawer]",'[up-layer="new drawer"]')))},885:()=>{const e=up.util;up.migrate.renamedPackage("proxy","network"),up.migrate.renamedEvent("up:proxy:load","up:request:load"),up.migrate.renamedEvent("up:proxy:received","up:request:loaded"),up.migrate.renamedEvent("up:proxy:loaded","up:request:loaded"),up.migrate.renamedEvent("up:proxy:fatal","up:request:offline"),up.migrate.renamedEvent("up:request:fatal","up:request:offline"),up.migrate.renamedEvent("up:proxy:aborted","up:request:aborted"),up.migrate.renamedEvent("up:proxy:slow","up:network:late"),up.migrate.renamedEvent("up:proxy:recover","up:network:recover"),up.migrate.renamedEvent("up:request:late","up:network:late"),up.migrate.renamedEvent("up:request:recover","up:network:recover"),up.network.config.patch((function(e){const u=()=>up.migrate.deprecated("up.proxy.config.preloadDelay","up.link.config.preloadDelay");Object.defineProperty(e,"preloadDelay",{configurable:!0,get:()=>(u(),up.link.config.preloadDelay),set(e){u(),up.link.config.preloadDelay=e}})})),up.network.config.patch((function(e){up.migrate.renamedProperty(e,"maxRequests","concurrency"),up.migrate.renamedProperty(e,"slowDelay","lateDelay"),up.migrate.renamedProperty(e,"cacheExpiry","cacheExpireAge",'The configuration up.network.config.cacheExpiry has been renamed to up.network.config.cacheExpireAge. Note that Unpoly 3+ automatically reloads cached content after rendering to ensure users always see fresh data ("cache revalidation"). Setting a custom expiry may no longer be necessary.'),up.migrate.renamedProperty(e,"clearCache","expireCache"),up.migrate.forbiddenPropertyValue(e,"cacheSize",0,"Disabling the cache with up.network.config.cacheSize = 0 is no longer supported. To disable automatic caching during navigation, set up.fragment.config.navigateOptions.cache = false instead."),up.network.config.requestMetaKeys=[],up.migrate.removedProperty(e,"requestMetaKeys","The configuration up.network.config.requestMetaKeys has been removed. Servers that optimize responses based on request headers should instead set a Vary response header.")})),up.migrate.handleRequestOptions=function(e){up.migrate.fixKey(e,"clearCache","expireCache"),e.solo&&up.migrate.warn("The option up.request({ solo }) has been removed. Use up.network.abort() or up.fragment.abort() instead.")},up.on("up:request:loaded",(function(e){"false"===e.response.headers["X-Up-Expire-Cache"]&&up.migrate.warn("The server can no longer override an { expireCache } option using an `X-Up-Expire-Cache: false` response header"),"false"===e.response.headers["X-Up-Evict-Cache"]&&up.migrate.warn("The server can no longer override an { evictCache } option using an `X-Up-Evict-Cache: false` response header")})),up.ajax=function(...e){return up.migrate.deprecated("up.ajax()","up.request()"),up.request(...e).then((e=>e.text))},up.network.clear=function(){up.migrate.deprecated("up.proxy.clear()","up.cache.expire()"),up.cache.expire()},up.Request.Cache.prototype.clear=function(...e){up.migrate.deprecated("up.cache.clear()","up.cache.expire()"),this.expire(...e)},up.network.preload=function(...e){return up.migrate.deprecated("up.proxy.preload(link)","up.link.preload(link)"),up.link.preload(...e)},up.migrate.preprocessAbortArgs=function(u){2===u.length&&e.isString(u[1])&&(up.migrate.warn("up.network.abort() no longer takes a reason as a second argument. Pass it as { reason } option instead."),u[1]={reason:u[1]})},up.network.isIdle=function(){return up.migrate.deprecated("up.network.isIdle()","!up.network.isBusy()"),!up.network.isBusy()},up.Request.prototype.navigate=function(){up.migrate.deprecated("up.Request#navigate()","up.Request#loadPage()"),this.loadPage()},up.migrate.renamedProperty(up.Request.prototype,"preload","background"),up.migrate.renamedProperty(up.Request.prototype,"badResponseTime","lateDelay"),up.Response.prototype.isSuccess=function(){return up.migrate.deprecated("up.Response#isSuccess()","up.Response#ok"),this.ok},up.Response.prototype.getHeader=function(e){return up.migrate.deprecated("up.Response#getHeader()","up.Response#header()"),this.header(e)},up.Response.prototype.isError=function(){return up.migrate.deprecated("up.Response#isError()","!up.Response#ok"),!this.ok};const u=up.network.config.progressBar;up.network.config.patch((function(t){t.progressBar=function(){return function(){const u=up.EventListener.allNonDefault(document);return e.find(u,(e=>"up:network:late"===e.eventType))}()?(up.migrate.warn("Disabled the default progress bar as may have built a custom loading indicator with your up:network:late listener. Please set up.network.config.progressBar to true or false."),!1):u}})),up.network.shouldReduceRequests=function(){return up.migrate("up.network.shouldReduceRequests() has been removed without replacement"),!1},up.network.config.patch((function(e){up.migrate.removedProperty(e,"badRTT"),up.migrate.removedProperty(e,"badDownlink"),up.migrate.renamedProperty(e,"badResponseTime","lateDelay")}))},69:()=>{up.popup={attach:(e,u={})=>(e=up.fragment.get(e),up.migrate.deprecated("up.popup.attach(origin)","up.layer.open({ origin, layer: 'popup' })"),up.layer.open(Object.assign(Object.assign({},u),{origin:e,layer:"popup"}))),close:(e={})=>(up.migrate.deprecated("up.popup.close()","up.layer.dismiss()"),up.layer.dismiss(null,e),up.migrate.formerlyAsync("up.layer.dismiss()")),url:()=>(up.migrate.deprecated("up.popup.url()","up.layer.location"),up.layer.location),coveredUrl(){var e;return up.migrate.deprecated("up.popup.coveredUrl()","up.layer.parent.location"),null===(e=up.layer.parent)||void 0===e?void 0:e.location},get config(){return up.migrate.deprecated("up.popup.config","up.layer.config.popup"),up.layer.config.popup},contains:e=>(up.migrate.deprecated("up.popup.contains()","up.layer.contains()"),up.layer.contains(e)),isOpen:()=>(up.migrate.deprecated("up.popup.isOpen()","up.layer.isOverlay()"),up.layer.isOverlay()),sync:()=>(up.migrate.deprecated("up.popup.sync()","up.layer.sync()"),up.layer.sync())},up.migrate.renamedEvent("up:popup:open","up:layer:open"),up.migrate.renamedEvent("up:popup:opened","up:layer:opened"),up.migrate.renamedEvent("up:popup:close","up:layer:dismiss"),up.migrate.renamedEvent("up:popup:closed","up:layer:dismissed"),up.migrate.targetMacro("up-popup",{"up-layer":"new popup"},(()=>up.migrate.deprecated("[up-popup]",'[up-layer="new popup"]')))},677:()=>{up.migrate.clearCacheFromXHR=function(e){let u=e.getResponseHeader("X-Up-Clear-Cache");if(u)return up.migrate.deprecated("X-Up-Clear-Cache","X-Up-Expire-Cache"),"false"!==u&&u},up.migrate.titleFromXHR=function(e){let u=e.getResponseHeader("X-Up-Title");if(u){if("false"===u)return!1;if('"'!==u[0]&&"'"!==u[0])return up.migrate.warn("X-Up-Title must now be a JSON-encoded string"),u}}},228:()=>{const e=up.element;let u;up.radio.config.patch((function(e){up.migrate.renamedProperty(e,"hungry","hungrySelectors")})),up.radio.config.pollEnabled=!0,up.radio.config.patch((function(e){u=up.migrate.removedProperty(e,"pollEnabled","The configuration up.radio.config.pollEnabled has been removed. To disable polling, prevent up:fragment:poll instead.")})),up.on("up:fragment:poll",(function(e){u[0]||e.preventDefault()})),up.compiler("[up-hungry][up-if-history]",(function(u){e.booleanAttr(u,"up-if-history")&&u.addEventListener("up:fragment:hungry",(function(e){e.renderOptions.history||e.preventDefault()}))}))},771:()=>{const e=up.util,u=up.element;up.migrate.renamedPackage("syntax","script"),up.migrate.postCompile=function(u,t){let p;if(p=t.keep){up.migrate.warn("The { keep: true } option for up.compiler() has been removed. Have the compiler set [up-keep] attribute instead.");const t=e.isString(p)?p:"";for(let e of u)e.setAttribute("up-keep",t)}},up.migrate.targetMacro=function(t,p,o){up.macro(`[${t}]`,(function(n){let r;const a=e.copy(p);(r=n.getAttribute(t))?a["up-target"]=r:a["up-follow"]="",u.setMissingAttrs(n,a),n.removeAttribute(t),null==o||o()}))},up.$compiler=function(...e){up.migrate.warn("up.$compiler() has been deprecated. Instead use up.compiler() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return up.compiler(...e,(function(e,...t){let p=jQuery(e);return u(p,...t)}))},up.$macro=function(...e){up.migrate.warn("up.$macro() has been deprecated. Instead use up.macro() with a callback that wraps the given native element in a jQuery collection.");let u=e.pop();return up.macro(...e,(function(e,...t){let p=jQuery(e);return u(p,...t)}))},up.migrate.processCompilerPassMeta=function(e,u){Object.defineProperty(e,"response",{get:()=>(up.migrate.warn("Accessing meta.response from a compiler has been deprecated without replacement. Avoid fragments that compile differently for the initial page load vs. subsequent fragment updates."),u)})}},163:()=>{up.migrate.renamedPackage("navigation","status"),up.migrate.renamedPackage("feedback","status"),up.status.config.patch((function(e){up.migrate.renamedProperty(e,"navs","navSelectors")}))},197:()=>{up.macro("[up-tooltip]",(function(e){up.migrate.warn("[up-tooltip] has been deprecated. A [title] was set instead."),up.element.setMissingAttr(e,"title",e.getAttribute("up-tooltip"))}))},480:()=>{up.util.only=function(e,...u){return up.migrate.deprecated("up.util.only(object, ...keys)","up.util.pick(object, keys)"),up.util.pick(e,u)},up.util.except=function(e,...u){return up.migrate.deprecated("up.util.except(object, ...keys)","up.util.omit(object, keys)"),up.util.omit(e,u)},up.util.parseUrl=function(...e){return up.migrate.deprecated("up.util.parseUrl()","up.util.parseURL()"),up.util.parseURL(...e)},up.util.any=function(...e){return up.migrate.deprecated("up.util.any()","up.util.some()"),up.util.some(...e)},up.util.all=function(...e){return up.migrate.deprecated("up.util.all()","up.util.every()"),up.util.every(...e)},up.util.detect=function(...e){return up.migrate.deprecated("up.util.detect()","up.util.find()"),up.util.find(...e)},up.util.select=function(...e){return up.migrate.deprecated("up.util.select()","up.util.filter()"),up.util.filter(...e)},up.util.setTimer=function(...e){return up.migrate.deprecated("up.util.setTimer()","up.util.timer()"),up.util.timer(...e)},up.util.escapeHtml=function(...e){return up.migrate.deprecated("up.util.escapeHtml()","up.util.escapeHTML()"),up.util.escapeHTML(...e)},up.util.selectorForElement=function(...e){return up.migrate.deprecated("up.util.selectorForElement()","up.fragment.toTarget()"),up.fragment.toTarget(...e)},up.util.nextFrame=function(...e){return up.migrate.deprecated("up.util.nextFrame()","up.util.task()"),up.util.task(...e)},up.util.times=function(e,u){up.migrate.deprecated("up.util.times()","a `for` loop");for(let t=0;t<e;t++)u()},up.util.assign=function(...e){return up.migrate.deprecated("up.util.assign()","Object.assign()"),Object.assign(...e)},up.util.values=function(...e){return up.migrate.deprecated("up.util.values()","Object.values()"),Object.values(...e)},up.util.microtask=window.queueMicrotask,up.migrate.splitAtOr=function(e){let u=e.split(/\s+or\s+/);if(u.length>=2)return up.migrate.warn(`Separating tokens by \`or\` has been deprecated. Use a comma (\`,\`) instead. Found in "${e}".`),u}},338:()=>{up.migrate.renamedPackage("layout","viewport"),up.viewport.config.patch((function(e){up.migrate.renamedProperty(e,"viewports","viewportSelectors"),up.migrate.renamedProperty(e,"fixedTop","fixedTopSelectors"),up.migrate.renamedProperty(e,"fixedBottom","fixedBottomSelectors"),up.migrate.renamedProperty(e,"anchoredRight","anchoredRightSelectors"),up.migrate.renamedProperty(e,"snap","revealSnap"),up.migrate.removedProperty(e,"scrollSpeed")})),up.viewport.closest=function(...e){return up.migrate.deprecated("up.viewport.closest()","up.viewport.get()"),up.viewport.get(...e)},up.viewport.scroll=function(e,u,t={}){return up.migrate.deprecated("up.scroll()","Element#scrollTo()"),(e=up.fragment.get(e,t)).scrollTo(Object.assign(Object.assign({},t),{top:u})),up.migrate.formerlyAsync("up.scroll()")},up.scroll=up.viewport.scroll}},u={};function t(p){var o=u[p];if(void 0!==o)return o.exports;var n=u[p]={exports:{}};return e[p](n,n.exports,t),n.exports}up.framework.startExtension(),t(992),t(390),t(480),t(937),t(294),t(700),t(394),t(771),t(305),t(354),t(234),t(869),t(163),t(969),t(905),t(413),t(69),t(197),t(677),t(885),t(228),t(338),up.framework.stopExtension()})();
         
     | 
    
        data/assets/unpoly/unpoly.css
    CHANGED
    
    | 
         @@ -18,6 +18,7 @@ body.up-scrollbar-away { 
     | 
|
| 
       18 
18 
     | 
    
         
             
            }
         
     | 
| 
       19 
19 
     | 
    
         
             
            body.up-scrollbar-away, html:has(> body.up-scrollbar-away) {
         
     | 
| 
       20 
20 
     | 
    
         
             
              overflow-y: hidden !important;
         
     | 
| 
      
 21 
     | 
    
         
            +
              overflow-y: clip !important;
         
     | 
| 
       21 
22 
     | 
    
         
             
            }
         
     | 
| 
       22 
23 
     | 
    
         
             
            body.up-scrollbar-away .up-scrollbar-away {
         
     | 
| 
       23 
24 
     | 
    
         
             
              right: calc(var(--up-scrollbar-width) + var(--up-original-right)) !important;
         
     |