|
POST
|
Hello @andeb31 I understand why you are frustrated and while I cannot immediately solve your issue, I thought I might be able to explain why it's happening. ArcGIS Dashboards uses the Calcite Design System, which means that when an app offers color customization, they still have to map the value you enter to an existing color value in the design system. This ensures that any color you select carries across all the design system components in a way that won't result in unexpected contrast failures down the line. The design system color palette has a limited number of color variables available to make sure all their components interconnect and work in both light and dark modes. This is why accent color is controlling both focus state and selection state. Typically, it is assumed that link color will pass against the fill color and therefore it is also safe for the focus color and selection to use link color. Dashboards also ties these two values tied together. Set accent color and the link color uses a similar shade that is automatically darkened a bit. But that does not help you with the header. What you might be able to do is make an enhancement request to them that all elements and states within the header only use the values of 'header text color' and 'header foreground color.' They might be able to overwrite the default color values of that component easier than they can separate out focus and selection color variables.
... View more
2 weeks ago
|
1
|
1
|
184
|
|
BLOG
|
With the increased focus on improving the accessibility of software and websites, automated scanning tools have become an essential part of accessibility testing. However, not every error flagged by these tools is valid and it can sometimes be difficult to tell—especially if the Shadow DOM is involved. Let's start with the DOM Before explaining the Shadow DOM, it helps to first understand the DOM (Document Object Model), which is also sometimes referred to as the Light DOM. Websites and web apps are built with HTML (Hyper Text Markup Language), which helps browsers understand a page’s structure and content. However, HTML is not interactive. While HTML supports basic functionality like linking between pages, more complex interactions—such as searching a website, viewing a popup error message, or clicking a button to play a video—require a scripting language like JavaScript. The DOM translates the content of an HTML page into a type of object that JavaScript can understand. This allows JavaScript to dynamically change the structure, style, and content of the page. Web Components Web Components allow developers to create custom components as reusable blocks of code, using both the Light DOM and Shadow DOM. Each component self-contains everything it needs to work, which includes its visual styling and interactivity. The core benefits of Web Components are: 1) Scalability, 2) Consistency, and 3) Encapsulation. Because Web Components are a web standard, they can be used with any frontend framework. This makes them easier to reuse across projects. As a result, teams can build and update interfaces more quickly while maintaining a consistent look and behavior for those using their websites or apps. Grid of components in Calcite Design System The Shadow DOM The Shadow DOM is a built‑in part of Web Components. It provides developers with a private section of the page structure that acts as a container for a component’s behavior and visual styling. This helps encapsulate, or protect, the component from changes made to the rest of the HTML on the page. An important aspect of custom elements is encapsulation, because a custom element, by definition, is a piece of reusable functionality: it might be dropped into any web page and be expected to work. So it's important that code running in the page should not be able to accidentally break a custom element by modifying its internal implementation. Shadow DOM enables you to attach a DOM tree to an element, and have the internals of this tree hidden from JavaScript and CSS running in the page. — “Using shadow DOM” by Mozilla Contributors, licensed under CC-BY-SA 2.5 This encapsulation is what makes Web Components harder to break and easier to maintain. However, it also means that applications reusing Web Components cannot change the underlying code inside the Shadow DOM themselves. Okay...But how does this relate to accessibility testing? Accessibility scanning tools look for relationships in the code, such as labels, names, and roles. These relationships are used as signals to determine whether content is likely to work correctly with assistive technologies. However, not all scanning tools can fully inspect the Shadow DOM. As of 02.01.2024, WAVE was reported as not catching errors in the Shadow DOM and their Chrome extension changelog doesn't mention Shadow DOM support. This can result in false negatives. Other tools, like Axe (version 3.0 and later), do support the Shadow DOM. Even so, this doesn't guarantee that the tool can always determine whether a solution implemented inside the Shadow DOM is properly exposed to assistive technologies in the Light DOM. Example: Date Range Picker Calcite's Input Date Picker is a Web Component that can be configured as a date range picker. It combines two Input Text Web Components with a Date Picker Web Component, creating a single component involving multiple elements. Each of these pieces contains its own Shadow DOM. Label followed by two side-by-side text input fields, each featuring a calendar icon and MM/DD/YYYY placeholder text The Input Text fields have accessible names: aria-labels for "Start Date" and "End Date". These are defined inside the Shadow DOM and cannot be modified by applications that use the component. However, regardless of the application where this component may be used, a screen reader user will always hear those labels. Figure: Voice Over, a Mac OS screen reader, is focused on the first text field in a date modified search results filter. The gray dialog visually displays what is being heard. This includes the label Start Date, the placeholder text MM/DD/YYYY and the type of input field, which is editable text. Figure: Voice Over, a Mac OS screen reader, is focused on the second text field in a date modified search results filter. The gray dialog visually displays what is being heard. This includes the label End Date, the placeholder text MM/DD/YYYY, and the type of input field, which is editable text. Figure: Calcite Date Picker with developer tools expanded to highlight the HTML text input, which contains an aria-label of Start Date. The HTML text input is within the Shadow DOM (or shadow-root) of the <calcite-input-text> component, which is a customized version of a Web Component. The Calcite Date Picker component also provides a label property. This property allows applications to configure content inside Calcite’s Shadow DOM and it is rendered as an aria-label on a group that wraps the Date Range Picker to offer more context to the end-user. Figure: Voice Over, a Mac OS screen reader, is focused on a group role wrapped around both the Start and End date fields. The gray dialog visually displays what is being heard. The group has a non-visible aria-label of Choose date range. Figure: Calcite Date Picker with developer tools expanded. The code highlights the group role wrapped around the Calcite Input Text component <calcite-input-text>, which provides applications with a customizable aria-label within the Shadow DOM of Calcite’s parent Web Component <calcite-input-date-picker>. Because the Date Picker is made of multiple elements, there are two levels of Shadow DOM involved. Despite the presence of three labels—the group label, and the field labels for both text inputs—Axe reports Date Range Picker as missing a label. This is because the root component <calcite-input-date-picker> that displays in the Light DOM doesn’t appear to have a label. In reality, it has three labels, they are just lower down in the Shadow DOM. If testing this component with a screen reader, one will hear all three labels, meaning this error does not affect the user-experience. This is an example of a false positive. How can you identify what's in the Shadow DOM? When inspecting an element in a browser‘s developer tools, look for a line labelled #shadow-root (open) or #shadow-root (closed). If present, then that element contains content within the Shadow DOM. HTML code highlighting #shadow-root in the calcite-input-text component How do you identify false positives? An error flagged within the Shadow DOM does not automatically mean the error is invalid. It simply means the issue requires manual verification. Use a screen reader to interact with the component: Are labels and instructions announced? Are state changes communicated? If the answer is yes, then the user experience is most likely not impacted and the reported issue is probably a false positive. Reporting issues If you believe an issue is still valid after manual testing, we encourage you to report it through Esri Technical Support.
... View more
2 weeks ago
|
7
|
0
|
274
|
|
POST
|
@Amanda__Huber You may need to reach out to the companies themselves for specifics on how they'd work, but it appears most of them do workflow analysis, which would allow for a documented set of interactions that includes state changes, like opening a popup on a map to scan its HTML and content. - Evinced Web Flow Analyzer - Cross Browser Testing Workflow Analyzer However, most automated accessibility scanning tools are front-end tools that work in the browser—they aren't going to be scanning the underlying data JSON as that's more of a backend piece.
... View more
3 weeks ago
|
0
|
0
|
168
|
|
POST
|
Hi @Amanda__Huber, While I believe these require paid licenses, both Site Improve and Evinced have automated accessibility scanning software that allows you to audit multiple URLs at once: Site Improve Evinced
... View more
4 weeks ago
|
0
|
2
|
216
|
|
POST
|
Hello @sigccil, While it is a little hard to determine what app you are using from the screenshot above, it looks like you had also posted a similar question to the Online community, which provided a bit more reference. Generally, for applications with inline actions that don't support customization, the action label would be provided by Esri. Some applications may ask for labels, accessible names, or titles depending on what component is being configured or customized. In that type of scenario, the app publisher would set the label. To address the error you received from axe—we'd recommend you open an issue with Esri Support who can help ensure it makes it to the right product team. When logging accessibility issues with Support, we encourage you to provide as much information as possible about the application, your method of testing, and the error encountered, including: OS platform/Browser Testing Tool Repro Steps Source Code Issue Image / Video Success Criteria (from WCAG) URL Thank you, Klara
... View more
02-18-2026
01:17 PM
|
0
|
1
|
327
|
|
POST
|
Hello @Steve_Graham, There is variability in accessible maps. The visual hierarchy and context of a map may be closely tied to its purpose and intended audience, but in terms of options that you may consider applying: Consider textures and patterns to the polygon’s fill. For instance: https://codepen.io/geospatialem/pen/mdaEQpb Provide different outlines to polygons, such as dashes and solid lines Where possible, choose colors that can be discerned via monochrome Where possible, provide both fill and outlines to discern between polygons Where labels overlap, a halo on labels may help increase visibility. Keep the halo subtle and blend it into the basemap background, so that the label fill color adequately contrasts with surrounding map content—4.5:1 for regular text, 3:1 for large text. You may also consider having multiple layers with the same data, but different representations of symbology to increase access of information while following WCAG principles. Additional resources that may help: Minnesota's Map Design Guide Minnesota's Accessibility Design Guide for Interactive Maps ArcGIS Blog Designing Maps for Color Readability 7 Map Design Ideas for Accessibility That Enhance Readability
... View more
01-23-2026
09:56 AM
|
1
|
0
|
613
|
|
POST
|
If you're okay with those cards being slightly wider, you could also remove the 'col-lg-3' in your code, which would mean that the medium breakpoint of 3 cards, 4 columns wide (col-md-4) would apply to these and they'd stretch to fill the space of the 12-column grid.
... View more
09-03-2025
07:46 AM
|
0
|
0
|
743
|
|
POST
|
Hi @CatherineWendland, Another thought: It might be a bug with WAVE. They don't seem to have an external repo for reporting bugs, but they do have a contact form on their Help page: https://wave.webaim.org/help You might be able to reach out with your issue and see what they say.
... View more
07-31-2025
06:42 AM
|
0
|
1
|
1699
|
|
POST
|
Do you have any fixed width content, like an extra wide image, further down the page? It looks like the container of your Hub site isn't resizing to the mobile viewport correctly and my first guess would be that there's some type of content that can't wrap that is forcing a horizontal scroll and keeping your site at more of a iPad size. My second guess would be that you might have some custom CSS or HTML that either has a fixed width and can't shrink or is accidentally overriding a mobile breakpoint, but that's hard to know for certain without the URL. Do you have a public URL?
... View more
05-09-2025
06:20 AM
|
0
|
0
|
874
|
|
POST
|
@bsklafloh Are you using any generic selectors? My advice would be to set a unique class on each of the rows that contain elements you wish to style and then make sure your selectors are contained within that, e.g. .myUniqueRow div {float: left} One way to determine whether your CSS is the cause of these problems would be to temporarily comment it out. For CSS, the way you would do this is: /* .myUniqueRow div {float: left} */ If you do that and the problem goes away, then you'll know it's something in your styles that is impacting the layout of our app and likely because you're using a broad generic selector either from Bootstrap (e.g. ".container") or a generic HTML element (e.g. "div").
... View more
04-22-2025
07:38 AM
|
1
|
1
|
1450
|
|
POST
|
Adding to Justin's questions, you don't by chance have any custom CSS on your site, do you? If you use out-of-the-box Bootstrap without a unique row selector, it can sometimes affect the CSS of our app by accident, especially if you use !important.
... View more
04-22-2025
06:22 AM
|
0
|
3
|
1453
|
|
POST
|
Hi @AviS, The original post is talking about a custom header. Are you asking for help for spacing within a custom header? Or are you asking about the Hub row card specifically?
... View more
02-26-2025
02:40 PM
|
0
|
0
|
476
|
|
POST
|
Hi @Jen_Kern, You should be able to override our CSS. But you'll want to create a custom row class before you do this, so you don't accidentally affect anything else. On the row that contains the Text Card, go to Settings, then under Appearance, fill out the field labeled Row CSS Class. For purposes of my explanation, I'm going to pretend that I've set a row class to: custom-site-overrides Then to change the styling attached to the blockquote, you'll want to open up the HTML editor on the Text Card and add this to the top: <style> .custom-site-overrides blockquote { border-left: 5px solid #c4bcdc; } </style> Change the #c4bcdc to your preferred color and change 5px to whatever thickness you want. If you wanted to adjust the padding as well, you could add another line padding-left: 24px; and change that too.
... View more
02-24-2025
07:35 AM
|
0
|
1
|
928
|
|
POST
|
Hello @PanGIS , You are correct. Due to security concerns, Hub does not permit external javascript to be embedded and within my knowledge, limiting who can see links is only built into our out-of-the-box headers. I don't know of a way for you to do with with the custom header.
... View more
01-30-2025
07:00 AM
|
1
|
0
|
986
|
|
POST
|
Hello, Unfortunately, the code for the pledge-wrapper generates the numbers through a CSS property called counter-increment. There is no equivalent for icons. Additionally, because the numbers don't exist in the HTML, they can't simply be replaced by code for icons. Your best bet might be to look through CodePen samples for a horizontal timeline that uses icons and is generated through pure CSS. I did try a handful for you, but I couldn't find any that handled responsive resizing well. Sorry.
... View more
12-09-2024
11:32 AM
|
0
|
0
|
757
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 2 weeks ago | |
| 7 | 2 weeks ago | |
| 1 | 01-23-2026 09:56 AM | |
| 1 | 04-22-2025 07:38 AM | |
| 1 | 01-30-2025 07:00 AM |
| Online Status |
Offline
|
| Date Last Visited |
Thursday
|