diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index d489da78..7358281b 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -5,6 +5,8 @@ on: branches: [main] pull_request: workflow_dispatch: + schedule: + - cron: "0 3 * * 1" # every Monday at 3 AM UTC env: QUARTO_VERSION: 1.7.23 @@ -114,3 +116,25 @@ jobs: env: ${{ steps.deployment.outputs.env }} env_url: "https://${{ steps.deployment.outputs.env }}--pyshiny.netlify.app" logs: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + + - name: Upload site artifact + uses: actions/upload-artifact@v4 + with: + name: rendered-site + path: _build + + check-links: + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + with: + name: rendered-site + path: _build + + - name: Run lychee link checker + uses: lycheeverse/lychee-action@v2 + with: + args: --verbose --config ./lychee.toml ./_build diff --git a/docs/jupyter-widgets.qmd b/docs/jupyter-widgets.qmd index b7f412b0..e645530e 100644 --- a/docs/jupyter-widgets.qmd +++ b/docs/jupyter-widgets.qmd @@ -373,7 +373,7 @@ Under the hood, `reactive_read()` uses [ipywidgets' `observe()` method](https:// ::: Some widgets have attributes that _contain_ observable traits. -One practical example of this is the `selections` attribute of altair's `JupyterChart` class, which has an [observable `point` trait](https://altair-viz.github.io/user_guide/jupyter_chart.html#point-selections). +One practical example of this is the `selections` attribute of altair's `JupyterChart` class, which has an [observable `point` trait](https://altair-viz.github.io/user_guide/interactions/jupyter_chart.html#point-selections). ```{shinylive-python} #| standalone: true diff --git a/layouts/arrange/index.qmd b/layouts/arrange/index.qmd index 61af13fb..856e22d6 100644 --- a/layouts/arrange/index.qmd +++ b/layouts/arrange/index.qmd @@ -119,7 +119,7 @@ There's a lot more that `layout_columns()` can do with `col_widths` to make high - Insert empty space between items with a negative column width, e.g. `col_widths=c(4, -4, 4)` creates two columns 4 units wide with an empty space of 4 units between them. -Learn more in the API reference: [Express](https://shiny.posit.co/py/api/express/ui.layout_columns.html) \| [Core](https://shiny.posit.co/py/api/core/ui.layout_columns.html) +Learn more in the API reference: [Express](https://shiny.posit.co/py/api/express/express.ui.layout_columns.html) \| [Core](https://shiny.posit.co/py/api/core/ui.layout_columns.html) ::: diff --git a/layouts/navbars/index.qmd b/layouts/navbars/index.qmd index 97578d99..2bb630b3 100644 --- a/layouts/navbars/index.qmd +++ b/layouts/navbars/index.qmd @@ -9,10 +9,10 @@ listing: template: ../../components/_partials/components-detail-relevant-functions.ejs contents: - title: ui.page_navbar - href: https://shiny.posit.co/py/api/ui.page_navbar.html + href: https://shiny.posit.co/py/api/core/ui.page_navbar.html signature: ui.page_navbar(*args, title=None, id=None, selected=None, sidebar=None, fillable=True, fillable_mobile=False, gap=None, padding=None, position='static-top', header=None, footer=None, bg=None, inverse=False, underline=True, collapsible=True, fluid=True, window_title=MISSING, lang=None) - - title: ui.nav - href: https://shiny.posit.co/py/api/ui.nav.html + - title: ui.nav_panel + href: https://shiny.posit.co/py/api/core/ui.nav_panel.html signature: ui.nav_panel(title, *args, value=None, icon=None) --- @@ -47,7 +47,7 @@ Follow these steps to add a navbar to the top of your app: 1. Define a navbar page layout with `ui.page_navbar()`. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.page_navbar()` to control the items displayed in the navbar. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.page_navbar()` to control the items displayed in the navbar. 3. Set the `title` argument of `ui.page_navbar()` to set the browser window title. @@ -74,7 +74,7 @@ Follow these steps to add a navbar to the bottom of your app: 1. Define a navbar page layout with `ui.page_navbar()`. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.page_navbar()` to control the items displayed in the navbar. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.page_navbar()` to control the items displayed in the navbar. 3. Set the `position` parameter of `ui.page_navbar()` to `"fixed-bottom"` to pin the navbar to the bottom of the app. By default, `position` is `"static-top"`, which causes the navbar to display at the top with normal scrolling behavior. You can also pin the navbar to the top (`position="fixed-top"`). diff --git a/layouts/tabs/index.qmd b/layouts/tabs/index.qmd index 198d362e..223244e1 100644 --- a/layouts/tabs/index.qmd +++ b/layouts/tabs/index.qmd @@ -67,7 +67,7 @@ Follow these steps to create an app with a tabset with pill navigation layout: 1. Add `ui.navset_pill()` inside any Shiny UI page method (e.g., `ui.page_fluid()`). `ui.navset_pill()` creates a pillset. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.navset_pill()` to set the items displayed in the navset. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.navset_pill()` to set the items displayed in the navset. 3. Pass arguments to the nav items to control each item's title, appearance, and associated content. For example, set the `title` argument of `ui.nav_panel()` to control the displayed title of the nav item. Pass UI elements as additional arguments to `ui.nav_panel()`. These elements will be displayed when the tab is active. @@ -91,7 +91,7 @@ Follow these steps to create an app with a pill list navigation layout. A pill l 1. Add `ui.navset_pill_list()` inside any Shiny UI page method (e.g., `ui.page_fluid()`). `ui.navset_pill()` creates a pill list. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.navset_pill_list()` to set the items displayed in the pillset. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.navset_pill_list()` to set the items displayed in the pillset. 3. Pass arguments to the nav items to control each item's title, appearance, and associated content. For example, set the `title` argument of `ui.nav_panel()` to control the displayed title of the nav item. Pass UI elements as additional arguments to `ui.nav_panel()`. These elements will be displayed when the tab is active. @@ -115,7 +115,7 @@ Follow these steps to create an app with a tab navigation layout: 1. Add `ui.navset_tab()` inside any Shiny UI page method (e.g., `ui.page_fluid()`). `ui.navset_tab()` creates a tabset. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.navset_tab()` to set the items displayed in the tabset. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.navset_tab()` to set the items displayed in the tabset. 3. Pass arguments to the nav items to control each item's title, appearance, and associated content. For example, set the `title` argument of `ui.nav_panel()` to control the displayed title of the nav item. Pass UI elements as additional arguments to `ui.nav_panel()`. These elements will be displayed when the tab is active. @@ -139,7 +139,7 @@ Follow these steps to add a card with a tabbed tabset to your app: 1. Add `ui.navset_card_tab()` inside any Shiny UI page method (e.g., `ui.page_fluid()`). `ui.navset_card_tab()` creates a tabset inside a card. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.navset_card_tab()` to set the items displayed in the tabset inside the card. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.navset_card_tab()` to set the items displayed in the tabset inside the card. 3. Pass arguments to the nav items to control each item's title, appearance, and associated content. For example, set the `title` argument of `ui.nav_panel()` to control the displayed title of the nav item. Pass UI elements as additional arguments to `ui.nav_panel()`. These elements will be displayed when the tab is active. @@ -163,7 +163,7 @@ Follow these steps to add a card with a pill tabset to your app: 1. Add `ui.navset_card_pill()` inside any Shiny UI page method (e.g., `ui.page_fluid()`). `ui.navset_card_pill()` creates a pillset inside a card. - 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/ui.nav.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/ui.nav_menu.html)) to `ui.navset_card_pill()` to set the items displayed in the pillset inside the card. + 2. Pass nav items (e.g., [`ui.nav_panel()`](https://shiny.posit.co/py/api/core/ui.nav_panel.html) and [`ui.nav_menu()`](https://shiny.posit.co/py/api/core/ui.nav_menu.html)) to `ui.navset_card_pill()` to set the items displayed in the pillset inside the card. 3. Pass arguments to the nav items to control each item's title, appearance, and associated content. For example, set the `title` argument of `ui.nav_panel()` to control the displayed title of the nav item. Pass UI elements as additional arguments to `ui.nav_panel()`. These elements will be displayed when the tab is active. diff --git a/lychee.toml b/lychee.toml new file mode 100644 index 00000000..93cf15c3 --- /dev/null +++ b/lychee.toml @@ -0,0 +1,19 @@ +# Enable link caching. This can be helpful to avoid checking the same links on +# multiple runs. +cache = true + +# Discard all cached requests older than this duration. +max_cache_age = "2d" + +############################# Exclusions ########################## + +# Check links inside `` and `
` blocks as well as Markdown code
+# blocks.
+include_verbatim = false
+
+# Exclude URLs and mail addresses from checking (supports regex).
+exclude = [
+  '^https://github.com/posit-dev/py-shiny-site/edit/main/.*',
+  '^file:.*',
+  "^https://support.posit.co",
+]
diff --git a/templates/basic-chatbot/index.qmd b/templates/basic-chatbot/index.qmd
index c1c99d53..a295f662 100644
--- a/templates/basic-chatbot/index.qmd
+++ b/templates/basic-chatbot/index.qmd
@@ -5,8 +5,8 @@ date:         2025-03-25
 image:        thumbnail.png
 imagealt:     "A screenshot of the basic-chatbot template"
 app-height:   600px
-appurl:       https://posit-ai.basic-chatbot.share.connect.posit.cloud/
-sourceurl:    https://github.com/posit-dev/py-shiny-templates/tree/main/gen-ai/basic-chatbot
+appurl:       https://posit-ai-basic-chat.share.connect.posit.cloud/
+sourceurl:    https://github.com/posit-dev/py-shiny-templates/tree/main/gen-ai/basic-chat
 ---
 
 ::: {.panel-tabset .shiny-mode-tabset  group="shiny-app-mode"}