fix(uix audit): align morfo sema scope + remove Provider leak on 3 eidos namespaces

Section 4.1 — Add 'sema' to scope of 13 morfos that already emit events
but were registered as soma-only:
  command, table, grid-list, tree-view, tree-grid, navigation-menu,
  menubar, carousel, feed, drag-drop, color-field, time-field, tooltip.

Section 4.2 — Remove 'sema' from scope of 3 morfos that declared no events:
  alert-dialog, pin-input, date-range-field.

Section 5.1 — Drop `.Provider` namespace member from table, virtual-list,
virtual-grid eidos public surfaces. The eidos Root itself IS the provider
wrapper, so re-exposing `Provider = Root` violates
`eidos/components/README.md` rule 3. Internal usages of `<Table.Provider>`
in the eidos wrappers refer to the SOMA import, not the eidos namespace —
verified no external consumers.

Test result unchanged: 2391/2397 passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
active-uix
dev 5 months ago
parent 12a7e5cfd3
commit f13103e9a9

@ -50,7 +50,6 @@ import RowDetailTrigger from './table-row-detail-trigger.svelte';
import SortButton from './table-sort-button.svelte'; import SortButton from './table-sort-button.svelte';
type TableNamespace = typeof TableRoot & { type TableNamespace = typeof TableRoot & {
Provider: typeof TableRoot;
Header: typeof Header; Header: typeof Header;
Body: typeof Body; Body: typeof Body;
Footer: typeof Footer; Footer: typeof Footer;
@ -63,7 +62,6 @@ type TableNamespace = typeof TableRoot & {
}; };
const Table = TableRoot as TableNamespace; const Table = TableRoot as TableNamespace;
Table.Provider = TableRoot;
Table.Header = Header; Table.Header = Header;
Table.Body = Body; Table.Body = Body;
Table.Footer = Footer; Table.Footer = Footer;

@ -4,13 +4,11 @@ import Viewport from './virtual-grid-viewport.svelte';
import Cell from './virtual-grid-cell.svelte'; import Cell from './virtual-grid-cell.svelte';
type VirtualGridNamespace = typeof VirtualGridRoot & { type VirtualGridNamespace = typeof VirtualGridRoot & {
Provider: typeof VirtualGridRoot;
Viewport: typeof Viewport; Viewport: typeof Viewport;
Cell: typeof Cell; Cell: typeof Cell;
}; };
const VirtualGrid = VirtualGridRoot as VirtualGridNamespace; const VirtualGrid = VirtualGridRoot as VirtualGridNamespace;
VirtualGrid.Provider = VirtualGridRoot;
VirtualGrid.Viewport = Viewport; VirtualGrid.Viewport = Viewport;
VirtualGrid.Cell = Cell; VirtualGrid.Cell = Cell;

@ -5,14 +5,12 @@ import WindowViewport from './virtual-list-window-viewport.svelte';
import Item from './virtual-list-item.svelte'; import Item from './virtual-list-item.svelte';
type VirtualListNamespace = typeof VirtualListRoot & { type VirtualListNamespace = typeof VirtualListRoot & {
Provider: typeof VirtualListRoot;
Viewport: typeof Viewport; Viewport: typeof Viewport;
WindowViewport: typeof WindowViewport; WindowViewport: typeof WindowViewport;
Item: typeof Item; Item: typeof Item;
}; };
const VirtualList = VirtualListRoot as VirtualListNamespace; const VirtualList = VirtualListRoot as VirtualListNamespace;
VirtualList.Provider = VirtualListRoot;
VirtualList.Viewport = Viewport; VirtualList.Viewport = Viewport;
VirtualList.WindowViewport = WindowViewport; VirtualList.WindowViewport = WindowViewport;
VirtualList.Item = Item; VirtualList.Item = Item;

@ -8,7 +8,7 @@ export const alertDialogMorfo: Morfo = {
// Sema picks up Action/Cancel button events via the Dialog morfo's // Sema picks up Action/Cancel button events via the Dialog morfo's
// shared `commit-*` / `close-*` events — alert-dialog's morfo only // shared `commit-*` / `close-*` events — alert-dialog's morfo only
// declares the Action + Cancel button parts (Provider is virtual). // declares the Action + Cancel button parts (Provider is virtual).
scope: ['soma', 'sema', 'eidos'], scope: ['soma', 'eidos'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/',
texts: { texts: {
label: '#?components.alert-dialog.label|Alert Dialog', label: '#?components.alert-dialog.label|Alert Dialog',

@ -4,7 +4,7 @@ import { v } from '../types';
export const carouselMorfo = { export const carouselMorfo = {
name: 'Carousel', name: 'Carousel',
kebab: 'carousel', kebab: 'carousel',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/carousel/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/carousel/',
texts: { texts: {
label: '#?components.carousel.label|Carousel', label: '#?components.carousel.label|Carousel',

@ -4,7 +4,7 @@ import { v } from '../types';
export const colorFieldMorfo = { export const colorFieldMorfo = {
name: 'ColorField', name: 'ColorField',
kebab: 'color-field', kebab: 'color-field',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/',
texts: { texts: {
label: '#?components.color-field.label|Color field', label: '#?components.color-field.label|Color field',

@ -4,7 +4,7 @@ import { v } from '../types';
export const commandMorfo = { export const commandMorfo = {
name: 'Command', name: 'Command',
kebab: 'command', kebab: 'command',
scope: ['soma'], scope: ['soma', 'sema'],
texts: { texts: {
label: '#?components.command.label|Command palette', label: '#?components.command.label|Command palette',
list: '#?components.command.list|Command palette' list: '#?components.command.list|Command palette'

@ -7,7 +7,7 @@ export const dateRangeFieldMorfo = {
// Eidos wrapper added 2026-05-23 (`src/uix/eidos/components/date-range-field/`). // Eidos wrapper added 2026-05-23 (`src/uix/eidos/components/date-range-field/`).
// Sema events forwarded by the composed DateField instances (one per // Sema events forwarded by the composed DateField instances (one per
// endpoint) — no per-component cascade needed at this layer. // endpoint) — no per-component cascade needed at this layer.
scope: ['soma', 'sema', 'eidos'], scope: ['soma', 'eidos'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/',
texts: { texts: {
label: '#?components.date-range-field.label|Date Range Field', label: '#?components.date-range-field.label|Date Range Field',

@ -4,7 +4,7 @@ import { v } from '../types';
export const dragDropMorfo = { export const dragDropMorfo = {
name: 'DragDrop', name: 'DragDrop',
kebab: 'drag-drop', kebab: 'drag-drop',
scope: ['soma'], scope: ['soma', 'sema'],
texts: { texts: {
label: '#?components.drag-drop.label|Drag and drop', label: '#?components.drag-drop.label|Drag and drop',
'drag-started': '#?components.drag-drop.drag-started|Started dragging {{item}}', 'drag-started': '#?components.drag-drop.drag-started|Started dragging {{item}}',

@ -4,7 +4,7 @@ import { v } from '../types';
export const feedMorfo = { export const feedMorfo = {
name: 'Feed', name: 'Feed',
kebab: 'feed', kebab: 'feed',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/feed/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/feed/',
texts: { texts: {
label: '#?components.feed.label|Feed' label: '#?components.feed.label|Feed'

@ -4,7 +4,7 @@ import { v } from '../types';
export const gridListMorfo = { export const gridListMorfo = {
name: 'GridList', name: 'GridList',
kebab: 'grid-list', kebab: 'grid-list',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/grid/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/grid/',
texts: { texts: {
label: '#?components.grid-list.label|Grid list', label: '#?components.grid-list.label|Grid list',

@ -4,7 +4,7 @@ import { v } from '../types';
export const menubarMorfo = { export const menubarMorfo = {
name: 'Menubar', name: 'Menubar',
kebab: 'menubar', kebab: 'menubar',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/menubar/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/menubar/',
texts: { texts: {
label: '#?components.menubar.label|Menubar' label: '#?components.menubar.label|Menubar'

@ -4,7 +4,7 @@ import { v } from '../types';
export const navigationMenuMorfo = { export const navigationMenuMorfo = {
name: 'NavigationMenu', name: 'NavigationMenu',
kebab: 'navigation-menu', kebab: 'navigation-menu',
scope: ['soma'], scope: ['soma', 'sema'],
texts: { texts: {
label: '#?components.navigation-menu.label|Main' label: '#?components.navigation-menu.label|Main'
}, },

@ -7,7 +7,7 @@ export const pinInputMorfo = {
// Eidos wrapper added 2026-05-22 (`src/uix/eidos/components/pin-input/`). // Eidos wrapper added 2026-05-22 (`src/uix/eidos/components/pin-input/`).
// Sound for commit-fill (when the input reaches its length) comes from // Sound for commit-fill (when the input reaches its length) comes from
// the `commit` family base — no per-component cascade needed. // the `commit` family base — no per-component cascade needed.
scope: ['soma', 'sema', 'eidos'], scope: ['soma', 'eidos'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/textbox/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/textbox/',
texts: { texts: {
label: '#?components.pin-input.label|Pin Input', label: '#?components.pin-input.label|Pin Input',

@ -4,7 +4,7 @@ import { v } from '../types';
export const tableMorfo = { export const tableMorfo = {
name: 'Table', name: 'Table',
kebab: 'table', kebab: 'table',
scope: ['soma'], scope: ['soma', 'sema'],
texts: { texts: {
label: '#?components.table.label|Data table', label: '#?components.table.label|Data table',
'toggle-detail': '#?components.table.toggle-detail|Toggle detail', 'toggle-detail': '#?components.table.toggle-detail|Toggle detail',

@ -4,7 +4,7 @@ import { v } from '../types';
export const timeFieldMorfo = { export const timeFieldMorfo = {
name: 'TimeField', name: 'TimeField',
kebab: 'time-field', kebab: 'time-field',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/',
texts: { texts: {
label: '#?components.time-field.label|Time field', label: '#?components.time-field.label|Time field',

@ -11,7 +11,7 @@ import { v } from '../types';
export const tooltipMorfo = { export const tooltipMorfo = {
name: 'Tooltip', name: 'Tooltip',
kebab: 'tooltip', kebab: 'tooltip',
scope: ['soma', 'eidos'], scope: ['soma', 'eidos', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/',
texts: { texts: {
label: '#?components.tooltip.label|Tooltip' label: '#?components.tooltip.label|Tooltip'

@ -4,7 +4,7 @@ import { v } from '../types';
export const treeGridMorfo = { export const treeGridMorfo = {
name: 'TreeGrid', name: 'TreeGrid',
kebab: 'tree-grid', kebab: 'tree-grid',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/',
texts: { texts: {
label: '#?components.tree-grid.label|Tree grid', label: '#?components.tree-grid.label|Tree grid',

@ -4,7 +4,7 @@ import { v } from '../types';
export const treeViewMorfo = { export const treeViewMorfo = {
name: 'TreeView', name: 'TreeView',
kebab: 'tree-view', kebab: 'tree-view',
scope: ['soma'], scope: ['soma', 'sema'],
apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/treeview/', apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/treeview/',
texts: { texts: {
label: '#?components.tree-view.label|Tree' label: '#?components.tree-view.label|Tree'

Loading…
Cancel
Save

Powered by TurnKey Linux.