* feat(ui): add Ask AI to code block controls menu
Add an "Ask AI" option to the code controls dropdown menu on all code
blocks. Uses data-ask-ai-query attribute if provided by the template,
otherwise builds a query from the code content. Delegates to the
existing Kapa widget integration via the ask-ai-open click handler.
* fix(ui): fix Ask AI code control and add e2e tests
## Summary
- Add "Ask AI" option to the code controls dropdown (three-dot menu) on all code blocks
- Uses `data-ask-ai-query` attribute from the template if available, otherwise builds a query from the code content
- Delegates to the existing Kapa widget via the `ask-ai-open` click handler contract
- Reorder menu items: Copy → Ask AI → Fill window
## Bug fix
Fix Ask AI button not opening the Kapa widget. jQuery `.trigger('click')`
doesn't dispatch native DOM events, so the native
`document.addEventListener` in ask-ai-trigger.js never received the click.
Switch to native `.click()` and remove `href="#"` to prevent scroll-to-top.
## Tests
Add Cypress e2e test suite (`code-controls.cy.js`) with 16 tests covering:
- Initialization: code blocks wrapped, controls appended, menu item order
- Toggle: open/close on click, close on outside click, independent menus
- Copy to clipboard: success lifecycle, revert after timeout
- Fullscreen: modal open/close, body scroll lock, placeholder restore
- Ask AI: Kapa modal opens, query built with code content (MutationObserver)
* fix(ui): apply icon spacing to all code control menu items
Move .cf-icon margin-right rule from .copy-code and .fullscreen-toggle
to the shared li level so it applies to all menu items including Ask AI.
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix(ui): add keyboard accessibility to code controls menu
Replace clickable <span> and <li> elements with proper <button> elements
and ARIA roles for keyboard and assistive-technology access:
- Toggle: <span> → <button> with aria-label and aria-expanded
- Menu items: <li> → <li role="none"><button role="menuitem">
- Menu: <ul> gets role="menu"
- SCSS: add :focus-visible styles, reset button defaults
- JS: toggle handler updates aria-expanded on open/close
Also fix tests to match actual behavior:
- Remove bogus "close other menus" test that manually closed first menu
before opening second (tested nothing)
- Remove duplicate "close on re-click" test (same as outside-click)
- Add "keep menu open when copy is clicked" (stopPropagation behavior)
- Add accessibility markup validation test
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Continue refactoring JavaScript into a component pattern and ESM.
Replaces some jQuery with native DOM API.
chore(ai): reference documentation and instructions for training AI
chore(ai): implement Kapa AI chat widget
- Move script tag to HTML template to make it obvious.
- Cleanup javascript to make it more component-like
- Set Kapa attributes, support setting userid
chore(js): add JS dependencies, previously referenced in script tags, to package.json for JS builds.
fix(api): indents
chore(js): package Mermaid diagram library
chore(js): refactor JS for AIChat and Theme as examples of using the component pattern for HTML/CSS/JS
chore(js): Use the new local-storage API in refactored module code and in code not yet ported. Cleanup syntax in local-storage and make functions available from window.LocalStorageAPI.
fix(js): theme.js name-change
chore(js): fix ai-chat.js file name
fix(js): refactor:
- componentNames are snakecase in HTML
- replace DOM selection method and jQuery eventhandler assignment
- remove old theme.js references
chore(ai): configure chat window overlay, size, and position:
- removes overlay and scroll lock
- positions chat to the right and bottom
- expands sample question width to 12 cols
chore(ai): edit disclaimer
fix(ai): size and position
chore(js): make ai-chat specific to configuration and and setting userid (for testing and future use).
fix(js): copy referrerHost variable to v3-wayfinding instead of relying on influxdb-url to assign it.
chore(ai): add a footer div at page bottom to contain modal triggers for custom-time and ask-ai. Still needs some CSS help. Moves tooltip text from CSS to HTML data attribute.
chore(ai): dynamically load AI script tag after DOMContentLoaded to avoid race conditions. Call initialization from the modal trigger module and pass the show trigger function to the onload handler.
fix(ai): fix modal triggers to viewport
fix(modal-triggers): stack the triggers into a single column.
restyle footer widgets
updated time selector modal to use correct storage term
minor style update
WIP(ai-chat): get product data
chore(js): Factor out pageContext module from influxdb-url.js
chore(js): Refactor helpers.js out of inflluxdb-url.js
WIP: refactor influxdburl - minimal changes for module conversions
feat(ai): Custom AI chat example questions product and version.
Ask AI example questions:
- Adds support for customizing example Ask AI questions per product or version.
- Configure questions in site `data/products.yml`; otherwise, it uses default questions from `ask-ai.js`
Context, page, and product data:
- Adds sample URLs for remaining versions in influxdb_urls
- `page-context.js` consolidates and exports constants for page context (protocol, host, path, referrer) and path-to-data mappings for product and influxdb_url site data
Module refactor:
- Refactors some JavaScript into ES6 modules, and refactors some of those further into a Component pattern--just vanilla JS and no shadow DOM stuff. The Component pattern that uses data attributes to "bind" JavaScript modules with CSS and HTML is a popular approach in modern web development. This pattern enhances modularity, reusability, and maintainability by associating behavior (JavaScript), structure (HTML), and style (CSS) through the use of data attributes.
- `assets/main.js` is the entrypoint
- Passes pageParams from the Hugo page to modules that import `@params`.
- Moves most external dependencies out of `script` tags and into package.json to be managed with `yarn`.
- Adds `eslint`.
- For modules that aren't yet components, wraps execution statements inside an `initialize()` function and calls the function from `main.js` on `DOMContentLoaded`.
- For components, if the page contains the `data-component="<component-name>"`, the matching element is passed to the component function on `DOMContentLoaded`.
- I tried to avoid changing logic where it wasn't necessary.
Update DOC_GPT_PROFILE.md
customize ai chat modal styles
fix(influxdb-url): Rename to cloud_dedicated in influxdb_urls.yml, remove newly added placeholder URL and use the extant default, refactor
- Rename to in influxdb_urls.yml
- Fix influxdb-url.js and data provision in local-storage.js to use the new name, mapping it to to retain the existing local storage key
chore(api-lib): Use local-storage import instead of window global
chore(js): cleanup
fix(js): Ensure feature-callout initializes on page load
fix(theme): Load preferred theme before making the page visible. Execute a predefined function by specifying the function name in data-theme-callback
fix(search-toggle): Restores toggling the search field when sidebar is collapsed. Moves the event handler to a new search-button component
fix(ai): Fix custom attribute assignment. Rename property to ai_example_questions
Include the word `Bearer` or `Token`, a space, and your **token** value (all case-sensitive). Fix TOC links.
Fixes#5781
fix(api-docs): Update API reference directories and generation script for influxdb3 URL paths, update links and names in reference content
fix(api-ref): Update getswagger.sh destination paths to use the new directory structure when fetching spec files. Update the redocly plugin module path.
hotfix: fix hlevel bug in children shortcode
Remove underline from custom time widget
add color to custom time widget styling