@cratis/scene.react 4.37.0 → 4.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -56,7 +56,7 @@ function containsActive(item, isActive) {
56
56
  navigation?.outlets,
57
57
  navigation?.primaryScreen
58
58
  ]);
59
- const scope = application ? undefined : module ?? currentModuleOf.currentModuleOf(index, placement.primaryScreen);
59
+ const scope = application ? undefined : module ?? (model.moduleOf ? model.moduleOf(placement.primaryScreen) : currentModuleOf.currentModuleOf(index, placement.primaryScreen));
60
60
  const resolved = react.useMemo(()=>scene_engine.effectiveNavigation(index, model.navigation, scope, region), [
61
61
  index,
62
62
  model.navigation,
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationRegionView.js","sources":["../../../../navigation/region/NavigationRegionView.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { KeyboardEvent, MouseEvent, ReactNode, useContext, useMemo, useRef, useState } from 'react';\nimport { DestinationReference, NavigationRegionKind, parseIconReference } from '@cratis/scene.model';\nimport { ApplicationStructureIndex, EffectiveNavItem, EffectiveNavigationRegion, effectiveNavigation } from '@cratis/scene.engine';\nimport { SceneIcon } from '../../icons/SceneIcon';\nimport { useIconAdapters } from '../../icons/IconAdapterContext';\nimport { resolveDestination } from '../resolveDestination';\nimport { SceneNavigationContextInternal } from '../SceneNavigationContext';\nimport { NavigationRegionClassNames, defaultNavigationRegionClassNames } from './NavigationRegionClassNames';\nimport { SceneNavigationModel } from './SceneNavigationModel';\nimport { useSceneNavigationModel } from './SceneNavigationModelContext';\nimport { currentModuleOf } from './currentModuleOf';\nimport { navigationItemActive } from './navigationItemActive';\nimport { defaultScreenFor, navigationItemDestination } from './navigationItemDestination';\n\nexport interface NavigationRegionViewProps {\n /** Which region to show. */\n region: NavigationRegionKind;\n\n /**\n * The module to show the region of. When absent the region follows the module of the screen on the page, so\n * navigating to another module recomputes the effective items in place; outside every module it is the application's.\n */\n module?: string;\n\n /** Pins the region to the application level, whatever screen is on the page. */\n application?: boolean;\n\n /** What to resolve against; the {@link SceneNavigationModelProvider}'s when absent. */\n model?: SceneNavigationModel;\n\n /**\n * Which sub-items of a sidebar show: only those of the parents of the active item and of items the user expanded\n * (`active`, the default), or all of them (`all`) - a design layer wants the whole hierarchy.\n */\n expand?: 'active' | 'all';\n\n /** The accessible name of the `nav` landmark. */\n label?: string;\n\n /** The class names to put on the nodes. */\n classNames?: Partial<NavigationRegionClassNames>;\n\n /**\n * Draws an item's icon from its qualified reference. By default the icon is drawn through the adapters of the\n * enclosing `IconAdapterProvider`, or not at all without one.\n */\n renderIcon?(icon: string): ReactNode;\n\n /**\n * Content a host adds to an item after its title - Studio design mode draws the lock of an inherited item here; Stage\n * ignores it. The item carries `origin` and `readOnly`.\n */\n renderAdornment?(item: EffectiveNavItem): ReactNode;\n\n /** The href of an item's link, for opening it in a new tab; the hash route of the destination by default. */\n hrefFor?(destination: DestinationReference, url: string | undefined): string | undefined;\n\n /** Called after an item has been activated and the host has navigated. */\n onActivate?(item: EffectiveNavItem, destination: DestinationReference): void;\n}\n\nfunction itemKey(path: string[]): string {\n return path.join('/');\n}\n\nfunction containsActive(item: EffectiveNavItem, isActive: (item: EffectiveNavItem) => boolean): boolean {\n return isActive(item) || (item.children ?? []).some(child => containsActive(child, isActive));\n}\n\n/**\n * Renders the effective navigation of one region - a topbar or a sidebar - for the application or a module.\n *\n * - **Items** come from `effectiveNavigation`, so inherit/extend/override is already applied; nothing here re-implements\n * it. A topbar is flat; a sidebar nests, collapses, and expands the parents of the active item.\n * - **Active state** follows what the navigation host shows: an item is active (`aria-current`, `data-active`) when the\n * screen it opens is the one in its slot, so items rendering into different slots are active at once.\n * - **Activation** goes through the enclosing navigation host (`navigate`), which renders the target in the item's slot -\n * the `outlet` of the destination; outside a host it announces `cratis.scene.navigate`.\n * - **Authorization**: `isVisible` of the model hides items, it does not disable them.\n * - **Keyboard**: arrows (left/right in a topbar, up/down in a sidebar), Home and End move between items; in a sidebar\n * right expands and left collapses (or goes to the parent).\n *\n * Nothing here draws design chrome: items carry `data-read-only` and `data-origin` for a design layer to style.\n */\nexport function NavigationRegionView({ region, module, application = false, model: modelProp, label, expand = 'active', classNames, renderIcon, renderAdornment, hrefFor, onActivate }: NavigationRegionViewProps) {\n const contextModel = useSceneNavigationModel();\n const model = modelProp ?? contextModel;\n if (!model) throw new Error('NavigationRegionView needs a navigation model: pass `model` or render it inside a SceneNavigationModelProvider.');\n\n const navigation = useContext(SceneNavigationContextInternal);\n const adapters = useIconAdapters();\n const names = { ...defaultNavigationRegionClassNames, ...classNames };\n const index = useMemo(() => model.structure instanceof ApplicationStructureIndex ? model.structure : new ApplicationStructureIndex(model.structure), [model.structure]);\n const screenFor = model.screenFor ?? defaultScreenFor;\n\n const sidebar = region === NavigationRegionKind.Sidebar;\n const placement = useMemo(() => ({ primaryScreen: navigation?.primaryScreen, outlets: navigation?.outlets ?? {} }), [navigation?.outlets, navigation?.primaryScreen]);\n const scope = application ? undefined : module ?? currentModuleOf(index, placement.primaryScreen);\n const resolved: EffectiveNavigationRegion = useMemo(() => effectiveNavigation(index, model.navigation, scope, region), [index, model.navigation, scope, region]);\n\n const isActive = (item: EffectiveNavItem) => placement.primaryScreen !== undefined && navigationItemActive(item, { primaryScreen: placement.primaryScreen, outlets: placement.outlets }, screenFor, !sidebar);\n const isVisible = model.isVisible ?? (() => true);\n const visible = useMemo(() => {\n const keep = (items: EffectiveNavItem[]): EffectiveNavItem[] => items.filter(isVisible).map(item => item.children ? { ...item, children: keep(item.children) } : item);\n return keep(resolved.items);\n }, [resolved, model.isVisible]);\n\n const activeKey = JSON.stringify([placement.primaryScreen, placement.outlets, scope]);\n const [toggled, setToggled] = useState<{ key: string; state: Record<string, boolean> }>({ key: activeKey, state: {} });\n const overrides = toggled.key === activeKey ? toggled.state : {};\n const [focused, setFocused] = useState<string>();\n const root = useRef<HTMLElement>(null);\n\n const isExpanded = (item: EffectiveNavItem, key: string) => overrides[key] ?? (expand === 'all' || containsActive(item, isActive));\n const toggle = (key: string, expanded: boolean) => setToggled({ key: activeKey, state: { ...overrides, [key]: expanded } });\n\n const activate = (item: EffectiveNavItem) => {\n const destination = navigationItemDestination(item, screenFor);\n if (destination === undefined) return;\n if (navigation) {\n navigation.navigate(destination);\n } else {\n globalThis.dispatchEvent(new CustomEvent('cratis.scene.navigate', { detail: { targetScreen: destination.screen ?? '', destination, item } }));\n }\n\n onActivate?.(item, destination);\n };\n\n const links = () => Array.from(root.current?.querySelectorAll<HTMLElement>('[data-scene-nav-link]') ?? []);\n const focusLink = (element: HTMLElement | undefined) => {\n if (!element) return;\n setFocused(element.getAttribute('data-scene-nav-link') ?? undefined);\n element.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const all = links();\n const position = all.findIndex(link => link === document.activeElement);\n if (position < 0) return;\n const next = sidebar ? 'ArrowDown' : 'ArrowRight';\n const previous = sidebar ? 'ArrowUp' : 'ArrowLeft';\n const current = all[position];\n const key = current.getAttribute('data-scene-nav-link')!;\n const owner = current.closest('[data-scene-nav-item]') as HTMLElement | null;\n const hasChildren = owner?.getAttribute('data-scene-nav-parent') === 'true';\n const expanded = owner?.getAttribute('data-expanded') === 'true';\n\n let target: HTMLElement | undefined;\n if (event.key === next) target = all[Math.min(position + 1, all.length - 1)];\n else if (event.key === previous) target = all[Math.max(position - 1, 0)];\n else if (event.key === 'Home') target = all[0];\n else if (event.key === 'End') target = all[all.length - 1];\n else if (sidebar && event.key === 'ArrowRight' && hasChildren) {\n if (!expanded) toggle(key, true);\n else target = all[position + 1];\n } else if (sidebar && event.key === 'ArrowLeft') {\n if (hasChildren && expanded) toggle(key, false);\n else {\n const parent = owner?.parentElement?.closest('[data-scene-nav-item]')?.querySelector<HTMLElement>(':scope > [data-scene-nav-link]');\n if (parent) target = parent;\n }\n } else return;\n\n event.preventDefault();\n focusLink(target);\n };\n\n const tabStop = focused ?? undefined;\n const firstActive = (items: EffectiveNavItem[], path: string[]): string | undefined => {\n for (const item of items) {\n const key = itemKey([...path, item.id]);\n if (isActive(item)) return key;\n const inner = firstActive(item.children ?? [], [...path, item.id]);\n if (inner !== undefined && isExpanded(item, key)) return inner;\n }\n\n return undefined;\n };\n const firstKey = visible.length > 0 ? itemKey([visible[0].id]) : undefined;\n const stop = tabStop ?? firstActive(visible, []) ?? firstKey;\n\n const icon = (item: EffectiveNavItem) => {\n if (item.icon === undefined) return null;\n const drawn = renderIcon ? renderIcon(item.icon) : adapters ? (() => {\n const reference = parseIconReference(item.icon!);\n return reference ? <SceneIcon reference={reference} adapters={adapters} /> : null;\n })() : null;\n return drawn === null ? null : <span className={names.icon} aria-hidden='true' data-scene-icon={item.icon}>{drawn}</span>;\n };\n\n const renderItems = (items: EffectiveNavItem[], path: string[], level: number): ReactNode => items.map(item => {\n const key = itemKey([...path, item.id]);\n const destination = navigationItemDestination(item, screenFor);\n const active = isActive(item);\n const children = item.children ?? [];\n const parent = sidebar && children.length > 0;\n const expanded = parent && isExpanded(item, key);\n const url = destination ? resolveDestination(destination).url : undefined;\n const href = destination ? (hrefFor ? hrefFor(destination, url) : url ? `#/${url}` : undefined) : undefined;\n const onClick = (event: MouseEvent) => {\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) return;\n event.preventDefault();\n if (destination) activate(item);\n else if (parent) toggle(key, !expanded);\n };\n const content = <>\n {icon(item)}\n <span className={names.label}>{item.title}</span>\n {renderAdornment?.(item)}\n </>;\n\n return <li key={item.id} className={names.item} data-scene-nav-item={item.id} data-scene-nav-parent={parent ? 'true' : undefined}\n data-active={active} data-active-descendant={!active && parent && children.some(child => containsActive(child, isActive)) ? true : undefined} data-expanded={parent ? expanded : undefined} data-origin={item.origin} data-read-only={item.readOnly}\n data-slot={item.slot} data-level={level}>\n {destination || parent\n ? <a className={names.link} href={href ?? '#'} data-scene-nav-link={key} aria-current={active ? 'page' : undefined}\n aria-expanded={parent && !destination ? expanded : undefined} tabIndex={key === stop ? 0 : -1}\n onClick={onClick} onFocus={() => setFocused(key)}>{content}</a>\n : <span className={names.link} aria-disabled='true' data-scene-nav-link={key} tabIndex={-1}>{content}</span>}\n {parent && <button type='button' className={names.toggle} tabIndex={-1} aria-expanded={expanded} aria-controls={`${key}-items`}\n aria-label={`${expanded ? 'Collapse' : 'Expand'} ${item.title}`} onClick={() => toggle(key, !expanded)} />}\n {parent && expanded && <ul id={`${key}-items`} className={`${names.list} ${names.submenu}`}>{renderItems(children, [...path, item.id], level + 1)}</ul>}\n </li>;\n });\n\n return <nav ref={root} className={names.root} aria-label={label ?? (sidebar ? 'Sidebar' : 'Topbar')} data-scene-nav-region={region}\n data-scene-nav-sources={resolved.sources.kind} data-scene-nav-sources-label={resolved.sources.label} data-scene-nav-module={scope}\n data-scene-nav-mode={resolved.mode} onKeyDown={onKeyDown}>\n <ul className={names.list}>{renderItems(visible, [], 0)}</ul>\n </nav>;\n}\n"],"names":["itemKey","path","join","containsActive","item","isActive","children","some","child","NavigationRegionView","region","module","application","model","modelProp","label","expand","classNames","renderIcon","renderAdornment","hrefFor","onActivate","contextModel","useSceneNavigationModel","Error","navigation","useContext","SceneNavigationContextInternal","adapters","useIconAdapters","names","defaultNavigationRegionClassNames","index","useMemo","structure","ApplicationStructureIndex","screenFor","defaultScreenFor","sidebar","NavigationRegionKind","Sidebar","placement","primaryScreen","outlets","scope","undefined","currentModuleOf","resolved","effectiveNavigation","navigationItemActive","isVisible","visible","keep","items","filter","map","activeKey","JSON","stringify","toggled","setToggled","useState","key","state","overrides","focused","setFocused","root","useRef","isExpanded","toggle","expanded","activate","destination","navigationItemDestination","navigate","globalThis","dispatchEvent","CustomEvent","detail","targetScreen","screen","links","Array","from","current","querySelectorAll","focusLink","element","getAttribute","focus","onKeyDown","event","all","position","findIndex","link","document","activeElement","next","previous","owner","closest","hasChildren","target","Math","min","length","max","parent","parentElement","querySelector","preventDefault","tabStop","firstActive","id","inner","firstKey","stop","icon","drawn","reference","parseIconReference","_jsx","SceneIcon","span","className","aria-hidden","data-scene-icon","renderItems","level","active","url","resolveDestination","href","onClick","metaKey","ctrlKey","shiftKey","button","content","_jsxs","_Fragment","title","li","data-scene-nav-item","data-scene-nav-parent","data-active","data-active-descendant","data-expanded","data-origin","origin","data-read-only","readOnly","data-slot","slot","data-level","a","data-scene-nav-link","aria-current","aria-expanded","tabIndex","onFocus","aria-disabled","type","aria-controls","aria-label","ul","list","submenu","nav","ref","data-scene-nav-region","data-scene-nav-sources","sources","kind","data-scene-nav-sources-label","data-scene-nav-module","data-scene-nav-mode","mode"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationRegionView.js","sources":["../../../../navigation/region/NavigationRegionView.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { KeyboardEvent, MouseEvent, ReactNode, useContext, useMemo, useRef, useState } from 'react';\nimport { DestinationReference, NavigationRegionKind, parseIconReference } from '@cratis/scene.model';\nimport { ApplicationStructureIndex, EffectiveNavItem, EffectiveNavigationRegion, effectiveNavigation } from '@cratis/scene.engine';\nimport { SceneIcon } from '../../icons/SceneIcon';\nimport { useIconAdapters } from '../../icons/IconAdapterContext';\nimport { resolveDestination } from '../resolveDestination';\nimport { SceneNavigationContextInternal } from '../SceneNavigationContext';\nimport { NavigationRegionClassNames, defaultNavigationRegionClassNames } from './NavigationRegionClassNames';\nimport { SceneNavigationModel } from './SceneNavigationModel';\nimport { useSceneNavigationModel } from './SceneNavigationModelContext';\nimport { currentModuleOf } from './currentModuleOf';\nimport { navigationItemActive } from './navigationItemActive';\nimport { defaultScreenFor, navigationItemDestination } from './navigationItemDestination';\n\nexport interface NavigationRegionViewProps {\n /** Which region to show. */\n region: NavigationRegionKind;\n\n /**\n * The module to show the region of. When absent the region follows the module of the screen on the page, so\n * navigating to another module recomputes the effective items in place; outside every module it is the application's.\n */\n module?: string;\n\n /** Pins the region to the application level, whatever screen is on the page. */\n application?: boolean;\n\n /** What to resolve against; the {@link SceneNavigationModelProvider}'s when absent. */\n model?: SceneNavigationModel;\n\n /**\n * Which sub-items of a sidebar show: only those of the parents of the active item and of items the user expanded\n * (`active`, the default), or all of them (`all`) - a design layer wants the whole hierarchy.\n */\n expand?: 'active' | 'all';\n\n /** The accessible name of the `nav` landmark. */\n label?: string;\n\n /** The class names to put on the nodes. */\n classNames?: Partial<NavigationRegionClassNames>;\n\n /**\n * Draws an item's icon from its qualified reference. By default the icon is drawn through the adapters of the\n * enclosing `IconAdapterProvider`, or not at all without one.\n */\n renderIcon?(icon: string): ReactNode;\n\n /**\n * Content a host adds to an item after its title - Studio design mode draws the lock of an inherited item here; Stage\n * ignores it. The item carries `origin` and `readOnly`.\n */\n renderAdornment?(item: EffectiveNavItem): ReactNode;\n\n /** The href of an item's link, for opening it in a new tab; the hash route of the destination by default. */\n hrefFor?(destination: DestinationReference, url: string | undefined): string | undefined;\n\n /** Called after an item has been activated and the host has navigated. */\n onActivate?(item: EffectiveNavItem, destination: DestinationReference): void;\n}\n\nfunction itemKey(path: string[]): string {\n return path.join('/');\n}\n\nfunction containsActive(item: EffectiveNavItem, isActive: (item: EffectiveNavItem) => boolean): boolean {\n return isActive(item) || (item.children ?? []).some(child => containsActive(child, isActive));\n}\n\n/**\n * Renders the effective navigation of one region - a topbar or a sidebar - for the application or a module.\n *\n * - **Items** come from `effectiveNavigation`, so inherit/extend/override is already applied; nothing here re-implements\n * it. A topbar is flat; a sidebar nests, collapses, and expands the parents of the active item.\n * - **Active state** follows what the navigation host shows: an item is active (`aria-current`, `data-active`) when the\n * screen it opens is the one in its slot, so items rendering into different slots are active at once.\n * - **Activation** goes through the enclosing navigation host (`navigate`), which renders the target in the item's slot -\n * the `outlet` of the destination; outside a host it announces `cratis.scene.navigate`.\n * - **Authorization**: `isVisible` of the model hides items, it does not disable them.\n * - **Keyboard**: arrows (left/right in a topbar, up/down in a sidebar), Home and End move between items; in a sidebar\n * right expands and left collapses (or goes to the parent).\n *\n * Nothing here draws design chrome: items carry `data-read-only` and `data-origin` for a design layer to style.\n */\nexport function NavigationRegionView({ region, module, application = false, model: modelProp, label, expand = 'active', classNames, renderIcon, renderAdornment, hrefFor, onActivate }: NavigationRegionViewProps) {\n const contextModel = useSceneNavigationModel();\n const model = modelProp ?? contextModel;\n if (!model) throw new Error('NavigationRegionView needs a navigation model: pass `model` or render it inside a SceneNavigationModelProvider.');\n\n const navigation = useContext(SceneNavigationContextInternal);\n const adapters = useIconAdapters();\n const names = { ...defaultNavigationRegionClassNames, ...classNames };\n const index = useMemo(() => model.structure instanceof ApplicationStructureIndex ? model.structure : new ApplicationStructureIndex(model.structure), [model.structure]);\n const screenFor = model.screenFor ?? defaultScreenFor;\n\n const sidebar = region === NavigationRegionKind.Sidebar;\n const placement = useMemo(() => ({ primaryScreen: navigation?.primaryScreen, outlets: navigation?.outlets ?? {} }), [navigation?.outlets, navigation?.primaryScreen]);\n const scope = application ? undefined : module ?? (model.moduleOf ? model.moduleOf(placement.primaryScreen) : currentModuleOf(index, placement.primaryScreen));\n const resolved: EffectiveNavigationRegion = useMemo(() => effectiveNavigation(index, model.navigation, scope, region), [index, model.navigation, scope, region]);\n\n const isActive = (item: EffectiveNavItem) => placement.primaryScreen !== undefined && navigationItemActive(item, { primaryScreen: placement.primaryScreen, outlets: placement.outlets }, screenFor, !sidebar);\n const isVisible = model.isVisible ?? (() => true);\n const visible = useMemo(() => {\n const keep = (items: EffectiveNavItem[]): EffectiveNavItem[] => items.filter(isVisible).map(item => item.children ? { ...item, children: keep(item.children) } : item);\n return keep(resolved.items);\n }, [resolved, model.isVisible]);\n\n const activeKey = JSON.stringify([placement.primaryScreen, placement.outlets, scope]);\n const [toggled, setToggled] = useState<{ key: string; state: Record<string, boolean> }>({ key: activeKey, state: {} });\n const overrides = toggled.key === activeKey ? toggled.state : {};\n const [focused, setFocused] = useState<string>();\n const root = useRef<HTMLElement>(null);\n\n const isExpanded = (item: EffectiveNavItem, key: string) => overrides[key] ?? (expand === 'all' || containsActive(item, isActive));\n const toggle = (key: string, expanded: boolean) => setToggled({ key: activeKey, state: { ...overrides, [key]: expanded } });\n\n const activate = (item: EffectiveNavItem) => {\n const destination = navigationItemDestination(item, screenFor);\n if (destination === undefined) return;\n if (navigation) {\n navigation.navigate(destination);\n } else {\n globalThis.dispatchEvent(new CustomEvent('cratis.scene.navigate', { detail: { targetScreen: destination.screen ?? '', destination, item } }));\n }\n\n onActivate?.(item, destination);\n };\n\n const links = () => Array.from(root.current?.querySelectorAll<HTMLElement>('[data-scene-nav-link]') ?? []);\n const focusLink = (element: HTMLElement | undefined) => {\n if (!element) return;\n setFocused(element.getAttribute('data-scene-nav-link') ?? undefined);\n element.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const all = links();\n const position = all.findIndex(link => link === document.activeElement);\n if (position < 0) return;\n const next = sidebar ? 'ArrowDown' : 'ArrowRight';\n const previous = sidebar ? 'ArrowUp' : 'ArrowLeft';\n const current = all[position];\n const key = current.getAttribute('data-scene-nav-link')!;\n const owner = current.closest('[data-scene-nav-item]') as HTMLElement | null;\n const hasChildren = owner?.getAttribute('data-scene-nav-parent') === 'true';\n const expanded = owner?.getAttribute('data-expanded') === 'true';\n\n let target: HTMLElement | undefined;\n if (event.key === next) target = all[Math.min(position + 1, all.length - 1)];\n else if (event.key === previous) target = all[Math.max(position - 1, 0)];\n else if (event.key === 'Home') target = all[0];\n else if (event.key === 'End') target = all[all.length - 1];\n else if (sidebar && event.key === 'ArrowRight' && hasChildren) {\n if (!expanded) toggle(key, true);\n else target = all[position + 1];\n } else if (sidebar && event.key === 'ArrowLeft') {\n if (hasChildren && expanded) toggle(key, false);\n else {\n const parent = owner?.parentElement?.closest('[data-scene-nav-item]')?.querySelector<HTMLElement>(':scope > [data-scene-nav-link]');\n if (parent) target = parent;\n }\n } else return;\n\n event.preventDefault();\n focusLink(target);\n };\n\n const tabStop = focused ?? undefined;\n const firstActive = (items: EffectiveNavItem[], path: string[]): string | undefined => {\n for (const item of items) {\n const key = itemKey([...path, item.id]);\n if (isActive(item)) return key;\n const inner = firstActive(item.children ?? [], [...path, item.id]);\n if (inner !== undefined && isExpanded(item, key)) return inner;\n }\n\n return undefined;\n };\n const firstKey = visible.length > 0 ? itemKey([visible[0].id]) : undefined;\n const stop = tabStop ?? firstActive(visible, []) ?? firstKey;\n\n const icon = (item: EffectiveNavItem) => {\n if (item.icon === undefined) return null;\n const drawn = renderIcon ? renderIcon(item.icon) : adapters ? (() => {\n const reference = parseIconReference(item.icon!);\n return reference ? <SceneIcon reference={reference} adapters={adapters} /> : null;\n })() : null;\n return drawn === null ? null : <span className={names.icon} aria-hidden='true' data-scene-icon={item.icon}>{drawn}</span>;\n };\n\n const renderItems = (items: EffectiveNavItem[], path: string[], level: number): ReactNode => items.map(item => {\n const key = itemKey([...path, item.id]);\n const destination = navigationItemDestination(item, screenFor);\n const active = isActive(item);\n const children = item.children ?? [];\n const parent = sidebar && children.length > 0;\n const expanded = parent && isExpanded(item, key);\n const url = destination ? resolveDestination(destination).url : undefined;\n const href = destination ? (hrefFor ? hrefFor(destination, url) : url ? `#/${url}` : undefined) : undefined;\n const onClick = (event: MouseEvent) => {\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) return;\n event.preventDefault();\n if (destination) activate(item);\n else if (parent) toggle(key, !expanded);\n };\n const content = <>\n {icon(item)}\n <span className={names.label}>{item.title}</span>\n {renderAdornment?.(item)}\n </>;\n\n return <li key={item.id} className={names.item} data-scene-nav-item={item.id} data-scene-nav-parent={parent ? 'true' : undefined}\n data-active={active} data-active-descendant={!active && parent && children.some(child => containsActive(child, isActive)) ? true : undefined} data-expanded={parent ? expanded : undefined} data-origin={item.origin} data-read-only={item.readOnly}\n data-slot={item.slot} data-level={level}>\n {destination || parent\n ? <a className={names.link} href={href ?? '#'} data-scene-nav-link={key} aria-current={active ? 'page' : undefined}\n aria-expanded={parent && !destination ? expanded : undefined} tabIndex={key === stop ? 0 : -1}\n onClick={onClick} onFocus={() => setFocused(key)}>{content}</a>\n : <span className={names.link} aria-disabled='true' data-scene-nav-link={key} tabIndex={-1}>{content}</span>}\n {parent && <button type='button' className={names.toggle} tabIndex={-1} aria-expanded={expanded} aria-controls={`${key}-items`}\n aria-label={`${expanded ? 'Collapse' : 'Expand'} ${item.title}`} onClick={() => toggle(key, !expanded)} />}\n {parent && expanded && <ul id={`${key}-items`} className={`${names.list} ${names.submenu}`}>{renderItems(children, [...path, item.id], level + 1)}</ul>}\n </li>;\n });\n\n return <nav ref={root} className={names.root} aria-label={label ?? (sidebar ? 'Sidebar' : 'Topbar')} data-scene-nav-region={region}\n data-scene-nav-sources={resolved.sources.kind} data-scene-nav-sources-label={resolved.sources.label} data-scene-nav-module={scope}\n data-scene-nav-mode={resolved.mode} onKeyDown={onKeyDown}>\n <ul className={names.list}>{renderItems(visible, [], 0)}</ul>\n </nav>;\n}\n"],"names":["itemKey","path","join","containsActive","item","isActive","children","some","child","NavigationRegionView","region","module","application","model","modelProp","label","expand","classNames","renderIcon","renderAdornment","hrefFor","onActivate","contextModel","useSceneNavigationModel","Error","navigation","useContext","SceneNavigationContextInternal","adapters","useIconAdapters","names","defaultNavigationRegionClassNames","index","useMemo","structure","ApplicationStructureIndex","screenFor","defaultScreenFor","sidebar","NavigationRegionKind","Sidebar","placement","primaryScreen","outlets","scope","undefined","moduleOf","currentModuleOf","resolved","effectiveNavigation","navigationItemActive","isVisible","visible","keep","items","filter","map","activeKey","JSON","stringify","toggled","setToggled","useState","key","state","overrides","focused","setFocused","root","useRef","isExpanded","toggle","expanded","activate","destination","navigationItemDestination","navigate","globalThis","dispatchEvent","CustomEvent","detail","targetScreen","screen","links","Array","from","current","querySelectorAll","focusLink","element","getAttribute","focus","onKeyDown","event","all","position","findIndex","link","document","activeElement","next","previous","owner","closest","hasChildren","target","Math","min","length","max","parent","parentElement","querySelector","preventDefault","tabStop","firstActive","id","inner","firstKey","stop","icon","drawn","reference","parseIconReference","_jsx","SceneIcon","span","className","aria-hidden","data-scene-icon","renderItems","level","active","url","resolveDestination","href","onClick","metaKey","ctrlKey","shiftKey","button","content","_jsxs","_Fragment","title","li","data-scene-nav-item","data-scene-nav-parent","data-active","data-active-descendant","data-expanded","data-origin","origin","data-read-only","readOnly","data-slot","slot","data-level","a","data-scene-nav-link","aria-current","aria-expanded","tabIndex","onFocus","aria-disabled","type","aria-controls","aria-label","ul","list","submenu","nav","ref","data-scene-nav-region","data-scene-nav-sources","sources","kind","data-scene-nav-sources-label","data-scene-nav-module","data-scene-nav-mode","mode"],"mappings":"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"}
@@ -54,7 +54,7 @@ function containsActive(item, isActive) {
54
54
  navigation?.outlets,
55
55
  navigation?.primaryScreen
56
56
  ]);
57
- const scope = application ? undefined : module ?? currentModuleOf(index, placement.primaryScreen);
57
+ const scope = application ? undefined : module ?? (model.moduleOf ? model.moduleOf(placement.primaryScreen) : currentModuleOf(index, placement.primaryScreen));
58
58
  const resolved = useMemo(()=>effectiveNavigation(index, model.navigation, scope, region), [
59
59
  index,
60
60
  model.navigation,
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationRegionView.js","sources":["../../../../navigation/region/NavigationRegionView.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { KeyboardEvent, MouseEvent, ReactNode, useContext, useMemo, useRef, useState } from 'react';\nimport { DestinationReference, NavigationRegionKind, parseIconReference } from '@cratis/scene.model';\nimport { ApplicationStructureIndex, EffectiveNavItem, EffectiveNavigationRegion, effectiveNavigation } from '@cratis/scene.engine';\nimport { SceneIcon } from '../../icons/SceneIcon';\nimport { useIconAdapters } from '../../icons/IconAdapterContext';\nimport { resolveDestination } from '../resolveDestination';\nimport { SceneNavigationContextInternal } from '../SceneNavigationContext';\nimport { NavigationRegionClassNames, defaultNavigationRegionClassNames } from './NavigationRegionClassNames';\nimport { SceneNavigationModel } from './SceneNavigationModel';\nimport { useSceneNavigationModel } from './SceneNavigationModelContext';\nimport { currentModuleOf } from './currentModuleOf';\nimport { navigationItemActive } from './navigationItemActive';\nimport { defaultScreenFor, navigationItemDestination } from './navigationItemDestination';\n\nexport interface NavigationRegionViewProps {\n /** Which region to show. */\n region: NavigationRegionKind;\n\n /**\n * The module to show the region of. When absent the region follows the module of the screen on the page, so\n * navigating to another module recomputes the effective items in place; outside every module it is the application's.\n */\n module?: string;\n\n /** Pins the region to the application level, whatever screen is on the page. */\n application?: boolean;\n\n /** What to resolve against; the {@link SceneNavigationModelProvider}'s when absent. */\n model?: SceneNavigationModel;\n\n /**\n * Which sub-items of a sidebar show: only those of the parents of the active item and of items the user expanded\n * (`active`, the default), or all of them (`all`) - a design layer wants the whole hierarchy.\n */\n expand?: 'active' | 'all';\n\n /** The accessible name of the `nav` landmark. */\n label?: string;\n\n /** The class names to put on the nodes. */\n classNames?: Partial<NavigationRegionClassNames>;\n\n /**\n * Draws an item's icon from its qualified reference. By default the icon is drawn through the adapters of the\n * enclosing `IconAdapterProvider`, or not at all without one.\n */\n renderIcon?(icon: string): ReactNode;\n\n /**\n * Content a host adds to an item after its title - Studio design mode draws the lock of an inherited item here; Stage\n * ignores it. The item carries `origin` and `readOnly`.\n */\n renderAdornment?(item: EffectiveNavItem): ReactNode;\n\n /** The href of an item's link, for opening it in a new tab; the hash route of the destination by default. */\n hrefFor?(destination: DestinationReference, url: string | undefined): string | undefined;\n\n /** Called after an item has been activated and the host has navigated. */\n onActivate?(item: EffectiveNavItem, destination: DestinationReference): void;\n}\n\nfunction itemKey(path: string[]): string {\n return path.join('/');\n}\n\nfunction containsActive(item: EffectiveNavItem, isActive: (item: EffectiveNavItem) => boolean): boolean {\n return isActive(item) || (item.children ?? []).some(child => containsActive(child, isActive));\n}\n\n/**\n * Renders the effective navigation of one region - a topbar or a sidebar - for the application or a module.\n *\n * - **Items** come from `effectiveNavigation`, so inherit/extend/override is already applied; nothing here re-implements\n * it. A topbar is flat; a sidebar nests, collapses, and expands the parents of the active item.\n * - **Active state** follows what the navigation host shows: an item is active (`aria-current`, `data-active`) when the\n * screen it opens is the one in its slot, so items rendering into different slots are active at once.\n * - **Activation** goes through the enclosing navigation host (`navigate`), which renders the target in the item's slot -\n * the `outlet` of the destination; outside a host it announces `cratis.scene.navigate`.\n * - **Authorization**: `isVisible` of the model hides items, it does not disable them.\n * - **Keyboard**: arrows (left/right in a topbar, up/down in a sidebar), Home and End move between items; in a sidebar\n * right expands and left collapses (or goes to the parent).\n *\n * Nothing here draws design chrome: items carry `data-read-only` and `data-origin` for a design layer to style.\n */\nexport function NavigationRegionView({ region, module, application = false, model: modelProp, label, expand = 'active', classNames, renderIcon, renderAdornment, hrefFor, onActivate }: NavigationRegionViewProps) {\n const contextModel = useSceneNavigationModel();\n const model = modelProp ?? contextModel;\n if (!model) throw new Error('NavigationRegionView needs a navigation model: pass `model` or render it inside a SceneNavigationModelProvider.');\n\n const navigation = useContext(SceneNavigationContextInternal);\n const adapters = useIconAdapters();\n const names = { ...defaultNavigationRegionClassNames, ...classNames };\n const index = useMemo(() => model.structure instanceof ApplicationStructureIndex ? model.structure : new ApplicationStructureIndex(model.structure), [model.structure]);\n const screenFor = model.screenFor ?? defaultScreenFor;\n\n const sidebar = region === NavigationRegionKind.Sidebar;\n const placement = useMemo(() => ({ primaryScreen: navigation?.primaryScreen, outlets: navigation?.outlets ?? {} }), [navigation?.outlets, navigation?.primaryScreen]);\n const scope = application ? undefined : module ?? currentModuleOf(index, placement.primaryScreen);\n const resolved: EffectiveNavigationRegion = useMemo(() => effectiveNavigation(index, model.navigation, scope, region), [index, model.navigation, scope, region]);\n\n const isActive = (item: EffectiveNavItem) => placement.primaryScreen !== undefined && navigationItemActive(item, { primaryScreen: placement.primaryScreen, outlets: placement.outlets }, screenFor, !sidebar);\n const isVisible = model.isVisible ?? (() => true);\n const visible = useMemo(() => {\n const keep = (items: EffectiveNavItem[]): EffectiveNavItem[] => items.filter(isVisible).map(item => item.children ? { ...item, children: keep(item.children) } : item);\n return keep(resolved.items);\n }, [resolved, model.isVisible]);\n\n const activeKey = JSON.stringify([placement.primaryScreen, placement.outlets, scope]);\n const [toggled, setToggled] = useState<{ key: string; state: Record<string, boolean> }>({ key: activeKey, state: {} });\n const overrides = toggled.key === activeKey ? toggled.state : {};\n const [focused, setFocused] = useState<string>();\n const root = useRef<HTMLElement>(null);\n\n const isExpanded = (item: EffectiveNavItem, key: string) => overrides[key] ?? (expand === 'all' || containsActive(item, isActive));\n const toggle = (key: string, expanded: boolean) => setToggled({ key: activeKey, state: { ...overrides, [key]: expanded } });\n\n const activate = (item: EffectiveNavItem) => {\n const destination = navigationItemDestination(item, screenFor);\n if (destination === undefined) return;\n if (navigation) {\n navigation.navigate(destination);\n } else {\n globalThis.dispatchEvent(new CustomEvent('cratis.scene.navigate', { detail: { targetScreen: destination.screen ?? '', destination, item } }));\n }\n\n onActivate?.(item, destination);\n };\n\n const links = () => Array.from(root.current?.querySelectorAll<HTMLElement>('[data-scene-nav-link]') ?? []);\n const focusLink = (element: HTMLElement | undefined) => {\n if (!element) return;\n setFocused(element.getAttribute('data-scene-nav-link') ?? undefined);\n element.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const all = links();\n const position = all.findIndex(link => link === document.activeElement);\n if (position < 0) return;\n const next = sidebar ? 'ArrowDown' : 'ArrowRight';\n const previous = sidebar ? 'ArrowUp' : 'ArrowLeft';\n const current = all[position];\n const key = current.getAttribute('data-scene-nav-link')!;\n const owner = current.closest('[data-scene-nav-item]') as HTMLElement | null;\n const hasChildren = owner?.getAttribute('data-scene-nav-parent') === 'true';\n const expanded = owner?.getAttribute('data-expanded') === 'true';\n\n let target: HTMLElement | undefined;\n if (event.key === next) target = all[Math.min(position + 1, all.length - 1)];\n else if (event.key === previous) target = all[Math.max(position - 1, 0)];\n else if (event.key === 'Home') target = all[0];\n else if (event.key === 'End') target = all[all.length - 1];\n else if (sidebar && event.key === 'ArrowRight' && hasChildren) {\n if (!expanded) toggle(key, true);\n else target = all[position + 1];\n } else if (sidebar && event.key === 'ArrowLeft') {\n if (hasChildren && expanded) toggle(key, false);\n else {\n const parent = owner?.parentElement?.closest('[data-scene-nav-item]')?.querySelector<HTMLElement>(':scope > [data-scene-nav-link]');\n if (parent) target = parent;\n }\n } else return;\n\n event.preventDefault();\n focusLink(target);\n };\n\n const tabStop = focused ?? undefined;\n const firstActive = (items: EffectiveNavItem[], path: string[]): string | undefined => {\n for (const item of items) {\n const key = itemKey([...path, item.id]);\n if (isActive(item)) return key;\n const inner = firstActive(item.children ?? [], [...path, item.id]);\n if (inner !== undefined && isExpanded(item, key)) return inner;\n }\n\n return undefined;\n };\n const firstKey = visible.length > 0 ? itemKey([visible[0].id]) : undefined;\n const stop = tabStop ?? firstActive(visible, []) ?? firstKey;\n\n const icon = (item: EffectiveNavItem) => {\n if (item.icon === undefined) return null;\n const drawn = renderIcon ? renderIcon(item.icon) : adapters ? (() => {\n const reference = parseIconReference(item.icon!);\n return reference ? <SceneIcon reference={reference} adapters={adapters} /> : null;\n })() : null;\n return drawn === null ? null : <span className={names.icon} aria-hidden='true' data-scene-icon={item.icon}>{drawn}</span>;\n };\n\n const renderItems = (items: EffectiveNavItem[], path: string[], level: number): ReactNode => items.map(item => {\n const key = itemKey([...path, item.id]);\n const destination = navigationItemDestination(item, screenFor);\n const active = isActive(item);\n const children = item.children ?? [];\n const parent = sidebar && children.length > 0;\n const expanded = parent && isExpanded(item, key);\n const url = destination ? resolveDestination(destination).url : undefined;\n const href = destination ? (hrefFor ? hrefFor(destination, url) : url ? `#/${url}` : undefined) : undefined;\n const onClick = (event: MouseEvent) => {\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) return;\n event.preventDefault();\n if (destination) activate(item);\n else if (parent) toggle(key, !expanded);\n };\n const content = <>\n {icon(item)}\n <span className={names.label}>{item.title}</span>\n {renderAdornment?.(item)}\n </>;\n\n return <li key={item.id} className={names.item} data-scene-nav-item={item.id} data-scene-nav-parent={parent ? 'true' : undefined}\n data-active={active} data-active-descendant={!active && parent && children.some(child => containsActive(child, isActive)) ? true : undefined} data-expanded={parent ? expanded : undefined} data-origin={item.origin} data-read-only={item.readOnly}\n data-slot={item.slot} data-level={level}>\n {destination || parent\n ? <a className={names.link} href={href ?? '#'} data-scene-nav-link={key} aria-current={active ? 'page' : undefined}\n aria-expanded={parent && !destination ? expanded : undefined} tabIndex={key === stop ? 0 : -1}\n onClick={onClick} onFocus={() => setFocused(key)}>{content}</a>\n : <span className={names.link} aria-disabled='true' data-scene-nav-link={key} tabIndex={-1}>{content}</span>}\n {parent && <button type='button' className={names.toggle} tabIndex={-1} aria-expanded={expanded} aria-controls={`${key}-items`}\n aria-label={`${expanded ? 'Collapse' : 'Expand'} ${item.title}`} onClick={() => toggle(key, !expanded)} />}\n {parent && expanded && <ul id={`${key}-items`} className={`${names.list} ${names.submenu}`}>{renderItems(children, [...path, item.id], level + 1)}</ul>}\n </li>;\n });\n\n return <nav ref={root} className={names.root} aria-label={label ?? (sidebar ? 'Sidebar' : 'Topbar')} data-scene-nav-region={region}\n data-scene-nav-sources={resolved.sources.kind} data-scene-nav-sources-label={resolved.sources.label} data-scene-nav-module={scope}\n data-scene-nav-mode={resolved.mode} onKeyDown={onKeyDown}>\n <ul className={names.list}>{renderItems(visible, [], 0)}</ul>\n </nav>;\n}\n"],"names":["itemKey","path","join","containsActive","item","isActive","children","some","child","NavigationRegionView","region","module","application","model","modelProp","label","expand","classNames","renderIcon","renderAdornment","hrefFor","onActivate","contextModel","useSceneNavigationModel","Error","navigation","useContext","SceneNavigationContextInternal","adapters","useIconAdapters","names","defaultNavigationRegionClassNames","index","useMemo","structure","ApplicationStructureIndex","screenFor","defaultScreenFor","sidebar","NavigationRegionKind","Sidebar","placement","primaryScreen","outlets","scope","undefined","currentModuleOf","resolved","effectiveNavigation","navigationItemActive","isVisible","visible","keep","items","filter","map","activeKey","JSON","stringify","toggled","setToggled","useState","key","state","overrides","focused","setFocused","root","useRef","isExpanded","toggle","expanded","activate","destination","navigationItemDestination","navigate","globalThis","dispatchEvent","CustomEvent","detail","targetScreen","screen","links","Array","from","current","querySelectorAll","focusLink","element","getAttribute","focus","onKeyDown","event","all","position","findIndex","link","document","activeElement","next","previous","owner","closest","hasChildren","target","Math","min","length","max","parent","parentElement","querySelector","preventDefault","tabStop","firstActive","id","inner","firstKey","stop","icon","drawn","reference","parseIconReference","_jsx","SceneIcon","span","className","aria-hidden","data-scene-icon","renderItems","level","active","url","resolveDestination","href","onClick","metaKey","ctrlKey","shiftKey","button","content","_jsxs","_Fragment","title","li","data-scene-nav-item","data-scene-nav-parent","data-active","data-active-descendant","data-expanded","data-origin","origin","data-read-only","readOnly","data-slot","slot","data-level","a","data-scene-nav-link","aria-current","aria-expanded","tabIndex","onFocus","aria-disabled","type","aria-controls","aria-label","ul","list","submenu","nav","ref","data-scene-nav-region","data-scene-nav-sources","sources","kind","data-scene-nav-sources-label","data-scene-nav-module","data-scene-nav-mode","mode"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationRegionView.js","sources":["../../../../navigation/region/NavigationRegionView.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { KeyboardEvent, MouseEvent, ReactNode, useContext, useMemo, useRef, useState } from 'react';\nimport { DestinationReference, NavigationRegionKind, parseIconReference } from '@cratis/scene.model';\nimport { ApplicationStructureIndex, EffectiveNavItem, EffectiveNavigationRegion, effectiveNavigation } from '@cratis/scene.engine';\nimport { SceneIcon } from '../../icons/SceneIcon';\nimport { useIconAdapters } from '../../icons/IconAdapterContext';\nimport { resolveDestination } from '../resolveDestination';\nimport { SceneNavigationContextInternal } from '../SceneNavigationContext';\nimport { NavigationRegionClassNames, defaultNavigationRegionClassNames } from './NavigationRegionClassNames';\nimport { SceneNavigationModel } from './SceneNavigationModel';\nimport { useSceneNavigationModel } from './SceneNavigationModelContext';\nimport { currentModuleOf } from './currentModuleOf';\nimport { navigationItemActive } from './navigationItemActive';\nimport { defaultScreenFor, navigationItemDestination } from './navigationItemDestination';\n\nexport interface NavigationRegionViewProps {\n /** Which region to show. */\n region: NavigationRegionKind;\n\n /**\n * The module to show the region of. When absent the region follows the module of the screen on the page, so\n * navigating to another module recomputes the effective items in place; outside every module it is the application's.\n */\n module?: string;\n\n /** Pins the region to the application level, whatever screen is on the page. */\n application?: boolean;\n\n /** What to resolve against; the {@link SceneNavigationModelProvider}'s when absent. */\n model?: SceneNavigationModel;\n\n /**\n * Which sub-items of a sidebar show: only those of the parents of the active item and of items the user expanded\n * (`active`, the default), or all of them (`all`) - a design layer wants the whole hierarchy.\n */\n expand?: 'active' | 'all';\n\n /** The accessible name of the `nav` landmark. */\n label?: string;\n\n /** The class names to put on the nodes. */\n classNames?: Partial<NavigationRegionClassNames>;\n\n /**\n * Draws an item's icon from its qualified reference. By default the icon is drawn through the adapters of the\n * enclosing `IconAdapterProvider`, or not at all without one.\n */\n renderIcon?(icon: string): ReactNode;\n\n /**\n * Content a host adds to an item after its title - Studio design mode draws the lock of an inherited item here; Stage\n * ignores it. The item carries `origin` and `readOnly`.\n */\n renderAdornment?(item: EffectiveNavItem): ReactNode;\n\n /** The href of an item's link, for opening it in a new tab; the hash route of the destination by default. */\n hrefFor?(destination: DestinationReference, url: string | undefined): string | undefined;\n\n /** Called after an item has been activated and the host has navigated. */\n onActivate?(item: EffectiveNavItem, destination: DestinationReference): void;\n}\n\nfunction itemKey(path: string[]): string {\n return path.join('/');\n}\n\nfunction containsActive(item: EffectiveNavItem, isActive: (item: EffectiveNavItem) => boolean): boolean {\n return isActive(item) || (item.children ?? []).some(child => containsActive(child, isActive));\n}\n\n/**\n * Renders the effective navigation of one region - a topbar or a sidebar - for the application or a module.\n *\n * - **Items** come from `effectiveNavigation`, so inherit/extend/override is already applied; nothing here re-implements\n * it. A topbar is flat; a sidebar nests, collapses, and expands the parents of the active item.\n * - **Active state** follows what the navigation host shows: an item is active (`aria-current`, `data-active`) when the\n * screen it opens is the one in its slot, so items rendering into different slots are active at once.\n * - **Activation** goes through the enclosing navigation host (`navigate`), which renders the target in the item's slot -\n * the `outlet` of the destination; outside a host it announces `cratis.scene.navigate`.\n * - **Authorization**: `isVisible` of the model hides items, it does not disable them.\n * - **Keyboard**: arrows (left/right in a topbar, up/down in a sidebar), Home and End move between items; in a sidebar\n * right expands and left collapses (or goes to the parent).\n *\n * Nothing here draws design chrome: items carry `data-read-only` and `data-origin` for a design layer to style.\n */\nexport function NavigationRegionView({ region, module, application = false, model: modelProp, label, expand = 'active', classNames, renderIcon, renderAdornment, hrefFor, onActivate }: NavigationRegionViewProps) {\n const contextModel = useSceneNavigationModel();\n const model = modelProp ?? contextModel;\n if (!model) throw new Error('NavigationRegionView needs a navigation model: pass `model` or render it inside a SceneNavigationModelProvider.');\n\n const navigation = useContext(SceneNavigationContextInternal);\n const adapters = useIconAdapters();\n const names = { ...defaultNavigationRegionClassNames, ...classNames };\n const index = useMemo(() => model.structure instanceof ApplicationStructureIndex ? model.structure : new ApplicationStructureIndex(model.structure), [model.structure]);\n const screenFor = model.screenFor ?? defaultScreenFor;\n\n const sidebar = region === NavigationRegionKind.Sidebar;\n const placement = useMemo(() => ({ primaryScreen: navigation?.primaryScreen, outlets: navigation?.outlets ?? {} }), [navigation?.outlets, navigation?.primaryScreen]);\n const scope = application ? undefined : module ?? (model.moduleOf ? model.moduleOf(placement.primaryScreen) : currentModuleOf(index, placement.primaryScreen));\n const resolved: EffectiveNavigationRegion = useMemo(() => effectiveNavigation(index, model.navigation, scope, region), [index, model.navigation, scope, region]);\n\n const isActive = (item: EffectiveNavItem) => placement.primaryScreen !== undefined && navigationItemActive(item, { primaryScreen: placement.primaryScreen, outlets: placement.outlets }, screenFor, !sidebar);\n const isVisible = model.isVisible ?? (() => true);\n const visible = useMemo(() => {\n const keep = (items: EffectiveNavItem[]): EffectiveNavItem[] => items.filter(isVisible).map(item => item.children ? { ...item, children: keep(item.children) } : item);\n return keep(resolved.items);\n }, [resolved, model.isVisible]);\n\n const activeKey = JSON.stringify([placement.primaryScreen, placement.outlets, scope]);\n const [toggled, setToggled] = useState<{ key: string; state: Record<string, boolean> }>({ key: activeKey, state: {} });\n const overrides = toggled.key === activeKey ? toggled.state : {};\n const [focused, setFocused] = useState<string>();\n const root = useRef<HTMLElement>(null);\n\n const isExpanded = (item: EffectiveNavItem, key: string) => overrides[key] ?? (expand === 'all' || containsActive(item, isActive));\n const toggle = (key: string, expanded: boolean) => setToggled({ key: activeKey, state: { ...overrides, [key]: expanded } });\n\n const activate = (item: EffectiveNavItem) => {\n const destination = navigationItemDestination(item, screenFor);\n if (destination === undefined) return;\n if (navigation) {\n navigation.navigate(destination);\n } else {\n globalThis.dispatchEvent(new CustomEvent('cratis.scene.navigate', { detail: { targetScreen: destination.screen ?? '', destination, item } }));\n }\n\n onActivate?.(item, destination);\n };\n\n const links = () => Array.from(root.current?.querySelectorAll<HTMLElement>('[data-scene-nav-link]') ?? []);\n const focusLink = (element: HTMLElement | undefined) => {\n if (!element) return;\n setFocused(element.getAttribute('data-scene-nav-link') ?? undefined);\n element.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const all = links();\n const position = all.findIndex(link => link === document.activeElement);\n if (position < 0) return;\n const next = sidebar ? 'ArrowDown' : 'ArrowRight';\n const previous = sidebar ? 'ArrowUp' : 'ArrowLeft';\n const current = all[position];\n const key = current.getAttribute('data-scene-nav-link')!;\n const owner = current.closest('[data-scene-nav-item]') as HTMLElement | null;\n const hasChildren = owner?.getAttribute('data-scene-nav-parent') === 'true';\n const expanded = owner?.getAttribute('data-expanded') === 'true';\n\n let target: HTMLElement | undefined;\n if (event.key === next) target = all[Math.min(position + 1, all.length - 1)];\n else if (event.key === previous) target = all[Math.max(position - 1, 0)];\n else if (event.key === 'Home') target = all[0];\n else if (event.key === 'End') target = all[all.length - 1];\n else if (sidebar && event.key === 'ArrowRight' && hasChildren) {\n if (!expanded) toggle(key, true);\n else target = all[position + 1];\n } else if (sidebar && event.key === 'ArrowLeft') {\n if (hasChildren && expanded) toggle(key, false);\n else {\n const parent = owner?.parentElement?.closest('[data-scene-nav-item]')?.querySelector<HTMLElement>(':scope > [data-scene-nav-link]');\n if (parent) target = parent;\n }\n } else return;\n\n event.preventDefault();\n focusLink(target);\n };\n\n const tabStop = focused ?? undefined;\n const firstActive = (items: EffectiveNavItem[], path: string[]): string | undefined => {\n for (const item of items) {\n const key = itemKey([...path, item.id]);\n if (isActive(item)) return key;\n const inner = firstActive(item.children ?? [], [...path, item.id]);\n if (inner !== undefined && isExpanded(item, key)) return inner;\n }\n\n return undefined;\n };\n const firstKey = visible.length > 0 ? itemKey([visible[0].id]) : undefined;\n const stop = tabStop ?? firstActive(visible, []) ?? firstKey;\n\n const icon = (item: EffectiveNavItem) => {\n if (item.icon === undefined) return null;\n const drawn = renderIcon ? renderIcon(item.icon) : adapters ? (() => {\n const reference = parseIconReference(item.icon!);\n return reference ? <SceneIcon reference={reference} adapters={adapters} /> : null;\n })() : null;\n return drawn === null ? null : <span className={names.icon} aria-hidden='true' data-scene-icon={item.icon}>{drawn}</span>;\n };\n\n const renderItems = (items: EffectiveNavItem[], path: string[], level: number): ReactNode => items.map(item => {\n const key = itemKey([...path, item.id]);\n const destination = navigationItemDestination(item, screenFor);\n const active = isActive(item);\n const children = item.children ?? [];\n const parent = sidebar && children.length > 0;\n const expanded = parent && isExpanded(item, key);\n const url = destination ? resolveDestination(destination).url : undefined;\n const href = destination ? (hrefFor ? hrefFor(destination, url) : url ? `#/${url}` : undefined) : undefined;\n const onClick = (event: MouseEvent) => {\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) return;\n event.preventDefault();\n if (destination) activate(item);\n else if (parent) toggle(key, !expanded);\n };\n const content = <>\n {icon(item)}\n <span className={names.label}>{item.title}</span>\n {renderAdornment?.(item)}\n </>;\n\n return <li key={item.id} className={names.item} data-scene-nav-item={item.id} data-scene-nav-parent={parent ? 'true' : undefined}\n data-active={active} data-active-descendant={!active && parent && children.some(child => containsActive(child, isActive)) ? true : undefined} data-expanded={parent ? expanded : undefined} data-origin={item.origin} data-read-only={item.readOnly}\n data-slot={item.slot} data-level={level}>\n {destination || parent\n ? <a className={names.link} href={href ?? '#'} data-scene-nav-link={key} aria-current={active ? 'page' : undefined}\n aria-expanded={parent && !destination ? expanded : undefined} tabIndex={key === stop ? 0 : -1}\n onClick={onClick} onFocus={() => setFocused(key)}>{content}</a>\n : <span className={names.link} aria-disabled='true' data-scene-nav-link={key} tabIndex={-1}>{content}</span>}\n {parent && <button type='button' className={names.toggle} tabIndex={-1} aria-expanded={expanded} aria-controls={`${key}-items`}\n aria-label={`${expanded ? 'Collapse' : 'Expand'} ${item.title}`} onClick={() => toggle(key, !expanded)} />}\n {parent && expanded && <ul id={`${key}-items`} className={`${names.list} ${names.submenu}`}>{renderItems(children, [...path, item.id], level + 1)}</ul>}\n </li>;\n });\n\n return <nav ref={root} className={names.root} aria-label={label ?? (sidebar ? 'Sidebar' : 'Topbar')} data-scene-nav-region={region}\n data-scene-nav-sources={resolved.sources.kind} data-scene-nav-sources-label={resolved.sources.label} data-scene-nav-module={scope}\n data-scene-nav-mode={resolved.mode} onKeyDown={onKeyDown}>\n <ul className={names.list}>{renderItems(visible, [], 0)}</ul>\n </nav>;\n}\n"],"names":["itemKey","path","join","containsActive","item","isActive","children","some","child","NavigationRegionView","region","module","application","model","modelProp","label","expand","classNames","renderIcon","renderAdornment","hrefFor","onActivate","contextModel","useSceneNavigationModel","Error","navigation","useContext","SceneNavigationContextInternal","adapters","useIconAdapters","names","defaultNavigationRegionClassNames","index","useMemo","structure","ApplicationStructureIndex","screenFor","defaultScreenFor","sidebar","NavigationRegionKind","Sidebar","placement","primaryScreen","outlets","scope","undefined","moduleOf","currentModuleOf","resolved","effectiveNavigation","navigationItemActive","isVisible","visible","keep","items","filter","map","activeKey","JSON","stringify","toggled","setToggled","useState","key","state","overrides","focused","setFocused","root","useRef","isExpanded","toggle","expanded","activate","destination","navigationItemDestination","navigate","globalThis","dispatchEvent","CustomEvent","detail","targetScreen","screen","links","Array","from","current","querySelectorAll","focusLink","element","getAttribute","focus","onKeyDown","event","all","position","findIndex","link","document","activeElement","next","previous","owner","closest","hasChildren","target","Math","min","length","max","parent","parentElement","querySelector","preventDefault","tabStop","firstActive","id","inner","firstKey","stop","icon","drawn","reference","parseIconReference","_jsx","SceneIcon","span","className","aria-hidden","data-scene-icon","renderItems","level","active","url","resolveDestination","href","onClick","metaKey","ctrlKey","shiftKey","button","content","_jsxs","_Fragment","title","li","data-scene-nav-item","data-scene-nav-parent","data-active","data-active-descendant","data-expanded","data-origin","origin","data-read-only","readOnly","data-slot","slot","data-level","a","data-scene-nav-link","aria-current","aria-expanded","tabIndex","onFocus","aria-disabled","type","aria-controls","aria-label","ul","list","submenu","nav","ref","data-scene-nav-region","data-scene-nav-sources","sources","kind","data-scene-nav-sources-label","data-scene-nav-module","data-scene-nav-mode","mode"],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface SceneNavigationModel {
4
4
  structure: ApplicationStructure | ApplicationStructureIndex;
5
5
  navigation: NavigationModel;
6
6
  screenFor?(item: EffectiveNavItem): string | undefined;
7
+ moduleOf?(screen: string | undefined): string | undefined;
7
8
  isVisible?(item: EffectiveNavItem): boolean;
8
9
  }
9
10
  //# sourceMappingURL=SceneNavigationModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SceneNavigationModel.d.ts","sourceRoot":"","sources":["../../../../navigation/region/SceneNavigationModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMnF,MAAM,WAAW,oBAAoB;IAEjC,SAAS,EAAE,oBAAoB,GAAG,yBAAyB,CAAC;IAG5D,UAAU,EAAE,eAAe,CAAC;IAM5B,SAAS,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAC;IAMvD,SAAS,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CAC/C"}
1
+ {"version":3,"file":"SceneNavigationModel.d.ts","sourceRoot":"","sources":["../../../../navigation/region/SceneNavigationModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMnF,MAAM,WAAW,oBAAoB;IAEjC,SAAS,EAAE,oBAAoB,GAAG,yBAAyB,CAAC;IAG5D,UAAU,EAAE,eAAe,CAAC;IAM5B,SAAS,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAC;IAOvD,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAM1D,SAAS,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CAC/C"}