diff --git a/tools/shared/README.md b/tools/shared/README.md
index a191073892..d8a7fcecf9 100644
--- a/tools/shared/README.md
+++ b/tools/shared/README.md
@@ -1,6 +1,6 @@
-## Description
+## Overview
-Shared mixins, tools, etc. that support developing Spectrum Web Components.
+The `@spectrum-web-components/shared` package provides essential base classes, mixins, and utilities that support developing Spectrum Web Components. This package contains foundational tools for focus management, slot observation, accessibility enhancements, and other common functionality used across the component library.
### Usage
@@ -8,121 +8,222 @@ Shared mixins, tools, etc. that support developing Spectrum Web Components.
[](https://bundlephobia.com/result?p=@spectrum-web-components/shared)
```bash
-npm install @spectrum-web-components/shared
+yarn add @spectrum-web-components/shared
```
-Individual base classes and mixins can be imported as follows:
+Individual base classes, mixins, and utilities can be imported as follows:
```javascript
import {
Focusable,
FocusVisiblePolyfillMixin,
getActiveElement,
+ getDeepElementFromPoint,
LikeAnchor,
+ ObserveSlotPresence,
ObserveSlotText,
} from '@spectrum-web-components/shared';
```
-### getDeepElementFromPoint
+#### Exported Classes, Mixins, and Utilities
+
+
+
+
+ Export
+ Type
+ Description
+
+
+
+ getActiveElement()
+ Utility
+ Find the active element, including shadow DOM
+
+
+ getDeepElementFromPoint()
+ Utility
+ Deepest element at coordinates
+
+
+ Focusable
+ Base class
+ Focus management for custom elements
+
+
+ LikeAnchor
+ Mixin
+ Anchor-like properties and rendering
+
+
+ FocusVisiblePolyfillMixin
+ Mixin
+ Polyfill for :focus-visible support
+
+
+ ObserveSlotPresence
+ Mixin
+ Observe presence of slotted content
+
+
+ ObserveSlotText
+ Mixin
+ Observe text changes in slots
+
+
+
+
+
+### Utilities
+
+#### getDeepElementFromPoint
+
+The `getDeepElementFromPoint` method allows you to obtain the deepest possible element at given coordinates on the current page. The method will step into any available `shadowRoot`s until it reaches the first element with no `shadowRoot` or no children available at the given coordinates.
+
+**When to use:** Use this when you need to find the actual target element at specific coordinates, especially when working with shadow DOM where `document.elementFromPoint()` might not give you the deepest element.
-The `getDeepElementFromPoint` method allows you to obtain the deepest possible element at a given coordinates on the current page. The method will step into any available `shadowRoot`s until it reaches the first element with no `shadowRoot` or no children available at the given coordinates.
+```javascript
+import { getDeepElementFromPoint } from '@spectrum-web-components/shared';
+
+const element = getDeepElementFromPoint(x, y);
+```
+
+#### getActiveElement
+
+Use this helper to find an `activeElement` in your component.
+
+**When to use:** Use this when you need to determine which element currently has focus, especially in components with shadow DOM where `document.activeElement` might not give you the correct element.
+
+```javascript
+import { getActiveElement } from '@spectrum-web-components/shared';
+
+const activeEl = getActiveElement(this);
+```
+
+### Base classes
+
+#### Focusable
-### Focusable
+The `Focusable` subclass of `SpectrumElement` adds helper methods and lifecycle coverage to support passing focus to a container element inside of a custom element. The `Focusable` base class handles `tabindex` setting into shadowed elements automatically and is based heavily on the [aybolit delegate-focus-mixin](https://github.com/web-padawan/aybolit/blob/master/packages/core/src/mixins/delegate-focus-mixin.js).
-The `Focusable` subclass of `LitElement` adds some helpers method and lifecycle coverage in order to support passing focus to a container element inside of a custom element. The Focusable base class handles tabindex setting into shadowed elements automatically and is based heavily on the [aybolit delegate-focus-mixin](https://github.com/web-padawan/aybolit/blob/master/packages/core/src/mixins/delegate-focus-mixin.js).
+**When to use:** Use this base class when creating custom elements that need to delegate focus to an internal element (like a button or input) while maintaining proper tabindex management and accessibility.
```javascript
import { Focusable } from '@spectrum-web-components/shared';
-import { html } from 'lit-element';
+import { html, TemplateResult } from '@spectrum-web-components/base';
class FocusableButton extends Focusable {
- public static override get styles(): CSSResultArray {
- return [...super.styles];
- }
public get focusElement(): HTMLElement {
return this.shadowRoot.querySelector('#button') as HTMLElement;
}
protected override render(): TemplateResult {
return html`
-