docs(design): cross-reference feature-slice and feature-availability (#357)

This commit is contained in:
rahim
2026-01-30 17:19:59 +11:00
committed by GitHub
parent 096723c82d
commit dcdc2b2d12
2 changed files with 4 additions and 22 deletions
+2 -20
View File
@@ -38,11 +38,11 @@ type FeatureAvailability = 'available' | 'unavailable' | 'unsupported';
## Related: Missing Feature vs Unavailable Capability
See [player-api](/rfc/player-api/index.md) for feature access patterns.
See [feature-slice-design](feature-slice-design.md) for feature access patterns.
| Concept | Cause | Detection |
| ---------------------- | ------------------- | --------------------------------- |
| Missing feature | Composition error | `hasFeature()` returns `false` |
| Missing feature | Feature not included| `slice === undefined` |
| Unavailable capability | Platform limitation | `*Availability === 'unsupported'` |
---
@@ -105,24 +105,6 @@ const volumeFeature = createFeature<HTMLMediaElement>()({
Guards receive `{ target, signal }`, not state. Check capability on target directly.
### UI Usage
```tsx
function VolumeSlider() {
const player = usePlayer();
if (!hasFeature(player, features.volume)) return null;
const { volume, volumeAvailability } = player;
if (volumeAvailability === 'unsupported') return null;
if (volumeAvailability === 'unavailable') return <Slider disabled />;
return <Slider value={volume} />;
}
```
---
## References
- Media Chrome uses similar pattern with `*Unavailable` properties
+2 -2
View File
@@ -154,9 +154,9 @@ A thin lens over the store — flat access, scoped subscription:
3. **Layered API** — Primitive layer is generic, player layer is typed and convenient
4. **Familiar pattern** — Similar to Jotai atoms, Vue InjectionKey
## Alternatives Considered
## Related
See [`rfc/player-api/primitives.md`](../../rfc/player-api/primitives.md) for the proxy-level API.
See [feature-availability-design](feature-availability-design.md) for capability detection patterns.
## Files