@consciousclouds/operator-shell 0.1.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.
Files changed (145) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +194 -0
  3. package/README.md +319 -0
  4. package/dist/chief/ChiefDrawer.d.ts +11 -0
  5. package/dist/chief/ChiefDrawer.d.ts.map +1 -0
  6. package/dist/chief/ChiefDrawer.js +49 -0
  7. package/dist/chief/ChiefDrawer.js.map +1 -0
  8. package/dist/chief/ChiefPanel.d.ts +10 -0
  9. package/dist/chief/ChiefPanel.d.ts.map +1 -0
  10. package/dist/chief/ChiefPanel.js +46 -0
  11. package/dist/chief/ChiefPanel.js.map +1 -0
  12. package/dist/chief/ChiefRegion.d.ts +9 -0
  13. package/dist/chief/ChiefRegion.d.ts.map +1 -0
  14. package/dist/chief/ChiefRegion.js +55 -0
  15. package/dist/chief/ChiefRegion.js.map +1 -0
  16. package/dist/chief/ChiefSession.d.ts +21 -0
  17. package/dist/chief/ChiefSession.d.ts.map +1 -0
  18. package/dist/chief/ChiefSession.js +9 -0
  19. package/dist/chief/ChiefSession.js.map +1 -0
  20. package/dist/chief/directive.d.ts +15 -0
  21. package/dist/chief/directive.d.ts.map +1 -0
  22. package/dist/chief/directive.js +20 -0
  23. package/dist/chief/directive.js.map +1 -0
  24. package/dist/chief/turn-adapter.d.ts +52 -0
  25. package/dist/chief/turn-adapter.d.ts.map +1 -0
  26. package/dist/chief/turn-adapter.js +23 -0
  27. package/dist/chief/turn-adapter.js.map +1 -0
  28. package/dist/chief/use-chief-shortcut.d.ts +17 -0
  29. package/dist/chief/use-chief-shortcut.d.ts.map +1 -0
  30. package/dist/chief/use-chief-shortcut.js +61 -0
  31. package/dist/chief/use-chief-shortcut.js.map +1 -0
  32. package/dist/chief/use-chief-turn.d.ts +50 -0
  33. package/dist/chief/use-chief-turn.d.ts.map +1 -0
  34. package/dist/chief/use-chief-turn.js +99 -0
  35. package/dist/chief/use-chief-turn.js.map +1 -0
  36. package/dist/flavor/types.d.ts +189 -0
  37. package/dist/flavor/types.d.ts.map +1 -0
  38. package/dist/flavor/types.js +13 -0
  39. package/dist/flavor/types.js.map +1 -0
  40. package/dist/frame/OperatorShell.d.ts +91 -0
  41. package/dist/frame/OperatorShell.d.ts.map +1 -0
  42. package/dist/frame/OperatorShell.js +54 -0
  43. package/dist/frame/OperatorShell.js.map +1 -0
  44. package/dist/guard/PermissionProvider.d.ts +49 -0
  45. package/dist/guard/PermissionProvider.d.ts.map +1 -0
  46. package/dist/guard/PermissionProvider.js +103 -0
  47. package/dist/guard/PermissionProvider.js.map +1 -0
  48. package/dist/guard/RouteGuard.d.ts +45 -0
  49. package/dist/guard/RouteGuard.d.ts.map +1 -0
  50. package/dist/guard/RouteGuard.js +59 -0
  51. package/dist/guard/RouteGuard.js.map +1 -0
  52. package/dist/guard/permissions.d.ts +88 -0
  53. package/dist/guard/permissions.d.ts.map +1 -0
  54. package/dist/guard/permissions.js +105 -0
  55. package/dist/guard/permissions.js.map +1 -0
  56. package/dist/header/EnvironmentSwitcher.d.ts +5 -0
  57. package/dist/header/EnvironmentSwitcher.d.ts.map +1 -0
  58. package/dist/header/EnvironmentSwitcher.js +51 -0
  59. package/dist/header/EnvironmentSwitcher.js.map +1 -0
  60. package/dist/header/OperatorHeader.d.ts +25 -0
  61. package/dist/header/OperatorHeader.d.ts.map +1 -0
  62. package/dist/header/OperatorHeader.js +13 -0
  63. package/dist/header/OperatorHeader.js.map +1 -0
  64. package/dist/header/OperatorProfileMenu.d.ts +2 -0
  65. package/dist/header/OperatorProfileMenu.d.ts.map +1 -0
  66. package/dist/header/OperatorProfileMenu.js +14 -0
  67. package/dist/header/OperatorProfileMenu.js.map +1 -0
  68. package/dist/header/ThemeToggle.d.ts +2 -0
  69. package/dist/header/ThemeToggle.d.ts.map +1 -0
  70. package/dist/header/ThemeToggle.js +17 -0
  71. package/dist/header/ThemeToggle.js.map +1 -0
  72. package/dist/icons/registry.d.ts +57 -0
  73. package/dist/icons/registry.d.ts.map +1 -0
  74. package/dist/icons/registry.js +83 -0
  75. package/dist/icons/registry.js.map +1 -0
  76. package/dist/index.d.ts +77 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +129 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/inspector/InspectorProvider.d.ts +41 -0
  81. package/dist/inspector/InspectorProvider.d.ts.map +1 -0
  82. package/dist/inspector/InspectorProvider.js +63 -0
  83. package/dist/inspector/InspectorProvider.js.map +1 -0
  84. package/dist/inspector/types.d.ts +91 -0
  85. package/dist/inspector/types.d.ts.map +1 -0
  86. package/dist/inspector/types.js +40 -0
  87. package/dist/inspector/types.js.map +1 -0
  88. package/dist/nav/routes.d.ts +39 -0
  89. package/dist/nav/routes.d.ts.map +1 -0
  90. package/dist/nav/routes.js +46 -0
  91. package/dist/nav/routes.js.map +1 -0
  92. package/dist/palette/CommandPalette.d.ts +40 -0
  93. package/dist/palette/CommandPalette.d.ts.map +1 -0
  94. package/dist/palette/CommandPalette.js +108 -0
  95. package/dist/palette/CommandPalette.js.map +1 -0
  96. package/dist/palette/commands.d.ts +58 -0
  97. package/dist/palette/commands.d.ts.map +1 -0
  98. package/dist/palette/commands.js +81 -0
  99. package/dist/palette/commands.js.map +1 -0
  100. package/dist/palette/search-sources.d.ts +126 -0
  101. package/dist/palette/search-sources.d.ts.map +1 -0
  102. package/dist/palette/search-sources.js +101 -0
  103. package/dist/palette/search-sources.js.map +1 -0
  104. package/dist/palette/use-search-results.d.ts +4 -0
  105. package/dist/palette/use-search-results.d.ts.map +1 -0
  106. package/dist/palette/use-search-results.js +51 -0
  107. package/dist/palette/use-search-results.js.map +1 -0
  108. package/dist/sidebar/OperatorSidebar.d.ts +44 -0
  109. package/dist/sidebar/OperatorSidebar.d.ts.map +1 -0
  110. package/dist/sidebar/OperatorSidebar.js +30 -0
  111. package/dist/sidebar/OperatorSidebar.js.map +1 -0
  112. package/dist/workspace/CanvasWorkspace.d.ts +78 -0
  113. package/dist/workspace/CanvasWorkspace.d.ts.map +1 -0
  114. package/dist/workspace/CanvasWorkspace.js +44 -0
  115. package/dist/workspace/CanvasWorkspace.js.map +1 -0
  116. package/dist/workspace/DashboardWorkspace.d.ts +91 -0
  117. package/dist/workspace/DashboardWorkspace.d.ts.map +1 -0
  118. package/dist/workspace/DashboardWorkspace.js +39 -0
  119. package/dist/workspace/DashboardWorkspace.js.map +1 -0
  120. package/dist/workspace/FormWorkspace.d.ts +107 -0
  121. package/dist/workspace/FormWorkspace.d.ts.map +1 -0
  122. package/dist/workspace/FormWorkspace.js +38 -0
  123. package/dist/workspace/FormWorkspace.js.map +1 -0
  124. package/dist/workspace/GraphWorkspace.d.ts +112 -0
  125. package/dist/workspace/GraphWorkspace.d.ts.map +1 -0
  126. package/dist/workspace/GraphWorkspace.js +147 -0
  127. package/dist/workspace/GraphWorkspace.js.map +1 -0
  128. package/dist/workspace/TableWorkspace.d.ts +74 -0
  129. package/dist/workspace/TableWorkspace.d.ts.map +1 -0
  130. package/dist/workspace/TableWorkspace.js +25 -0
  131. package/dist/workspace/TableWorkspace.js.map +1 -0
  132. package/dist/workspace/WorkspaceHost.d.ts +26 -0
  133. package/dist/workspace/WorkspaceHost.d.ts.map +1 -0
  134. package/dist/workspace/WorkspaceHost.js +21 -0
  135. package/dist/workspace/WorkspaceHost.js.map +1 -0
  136. package/dist/workspace/registry.d.ts +30 -0
  137. package/dist/workspace/registry.d.ts.map +1 -0
  138. package/dist/workspace/registry.js +33 -0
  139. package/dist/workspace/registry.js.map +1 -0
  140. package/dist/workspace/types.d.ts +79 -0
  141. package/dist/workspace/types.d.ts.map +1 -0
  142. package/dist/workspace/types.js +48 -0
  143. package/dist/workspace/types.js.map +1 -0
  144. package/package.json +64 -0
  145. package/styles/source.css +16 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @consciousclouds/operator-shell — the operator-console shell archetype
3
+ * (Layer 4 of the Frontend Platform).
4
+ *
5
+ * Frame + header + sidebar + nav engine + icon registry + OperatorFlavor
6
+ * types + permission-guard seam + the Workspace Framework (the main region's
7
+ * typed workspace seam: registry + host, fail-closed) + the Chief region
8
+ * (panel chrome over
9
+ * @consciousclouds/assistant-surface; transport injected via a TurnAdapter
10
+ * typed against the conductor-sdk event vocabulary). Mechanism only: no BFF
11
+ * route, no gateway URL, no personality default, no credential logic — the
12
+ * product injects meaning through Flavor, Brand, TurnAdapter, and the
13
+ * permission resolver. See docs/design/operator-platform-contracts.md and
14
+ * docs/design/frontend-platform-doctrine.md.
15
+ */
16
+ export { OperatorShell } from "./frame/OperatorShell.js";
17
+ export type { OperatorShellProps } from "./frame/OperatorShell.js";
18
+ export { OperatorHeader } from "./header/OperatorHeader.js";
19
+ export type { OperatorHeaderProps } from "./header/OperatorHeader.js";
20
+ export { OperatorProfileMenu } from "./header/OperatorProfileMenu.js";
21
+ export { ThemeToggle } from "./header/ThemeToggle.js";
22
+ export { EnvironmentSwitcher } from "./header/EnvironmentSwitcher.js";
23
+ export type { EnvironmentSwitcherProps } from "./header/EnvironmentSwitcher.js";
24
+ export { OperatorSidebar } from "./sidebar/OperatorSidebar.js";
25
+ export type { OperatorSidebarProps } from "./sidebar/OperatorSidebar.js";
26
+ export { deriveGatedNavGroups, flavorRoutes, isNavItemActive, isRouteInConsole, } from "./nav/routes.js";
27
+ export type { GatedNavGroup, GatedNavItem } from "./nav/routes.js";
28
+ export { OPERATOR_ICONS, SHIPPED_ICON_FAMILY, UNKNOWN_ICON, resolveIcon, resolveIconFamily, } from "./icons/registry.js";
29
+ export type { IconRegistry, ShippedIconFamily } from "./icons/registry.js";
30
+ export { CommandPalette } from "./palette/CommandPalette.js";
31
+ export type { CommandPaletteProps } from "./palette/CommandPalette.js";
32
+ export { derivePaletteGroups } from "./palette/commands.js";
33
+ export type { PaletteAction, PaletteCommand, PaletteGroup } from "./palette/commands.js";
34
+ export { isSearchResult, permittedSearchSources, querySearchSources, } from "./palette/search-sources.js";
35
+ export type { SearchResult, SearchResultAction, SearchResultGroup, SearchSource, } from "./palette/search-sources.js";
36
+ export { useSearchResults } from "./palette/use-search-results.js";
37
+ export type { OperatorCommandGroup, OperatorCommandItem, OperatorFlavor, OperatorFlavorChief, OperatorFlavorInspector, OperatorFlavorProduct, OperatorFlavorWorkspace, OperatorNavGroup, OperatorNavItem, } from "./flavor/types.js";
38
+ export { InspectorProvider, useInspector } from "./inspector/InspectorProvider.js";
39
+ export type { InspectorProviderProps } from "./inspector/InspectorProvider.js";
40
+ export { resolveInspectorView } from "./inspector/types.js";
41
+ export type { InspectorApi, InspectorOpenRequest, InspectorView, InspectorViewProps, InspectorViewRegistry, } from "./inspector/types.js";
42
+ export { ChiefRegion } from "./chief/ChiefRegion.js";
43
+ export type { ChiefRegionProps } from "./chief/ChiefRegion.js";
44
+ export { ChiefPanel } from "./chief/ChiefPanel.js";
45
+ export type { ChiefPanelProps } from "./chief/ChiefPanel.js";
46
+ export { ChiefDrawer } from "./chief/ChiefDrawer.js";
47
+ export type { ChiefDrawerProps } from "./chief/ChiefDrawer.js";
48
+ export { ChiefSession } from "./chief/ChiefSession.js";
49
+ export type { ChiefSessionProps } from "./chief/ChiefSession.js";
50
+ export { useChiefTurn } from "./chief/use-chief-turn.js";
51
+ export type { ChiefTurnMeta, ChiefTurnSession, UseChiefTurnOptions, } from "./chief/use-chief-turn.js";
52
+ export { CHIEF_SHORTCUT_KEY, CHIEF_SHORTCUT_LABEL, isChiefShortcut, useChiefShortcut, } from "./chief/use-chief-shortcut.js";
53
+ export { directiveToHref } from "./chief/directive.js";
54
+ export type { TurnAdapter, TurnAdapterHandle, TurnAdapterRequest, } from "./chief/turn-adapter.js";
55
+ export { WorkspaceHost, WorkspaceUnavailable } from "./workspace/WorkspaceHost.js";
56
+ export type { WorkspaceHostProps } from "./workspace/WorkspaceHost.js";
57
+ export { createWorkspaceRegistry } from "./workspace/registry.js";
58
+ export type { WorkspaceRegistry } from "./workspace/registry.js";
59
+ export { WORKSPACE_TYPE_IDS, isWorkspaceTypeId } from "./workspace/types.js";
60
+ export type { AnyWorkspaceType, WorkspaceComponentProps, WorkspaceType, WorkspaceTypeId, } from "./workspace/types.js";
61
+ export { CanvasWorkspace, canvasWorkspaceType } from "./workspace/CanvasWorkspace.js";
62
+ export type { CanvasWorkspaceInput, CanvasWorkspaceSlots, } from "./workspace/CanvasWorkspace.js";
63
+ export { DashboardWorkspace, dashboardWorkspaceType, } from "./workspace/DashboardWorkspace.js";
64
+ export type { DashboardWorkspaceInput, DashboardWorkspaceSection, DashboardWorkspaceSlots, DashboardWorkspaceStat, } from "./workspace/DashboardWorkspace.js";
65
+ export { TableWorkspace, tableWorkspaceType } from "./workspace/TableWorkspace.js";
66
+ export type { TableWorkspaceInput, TableWorkspaceSlots, } from "./workspace/TableWorkspace.js";
67
+ export { FormWorkspace, formWorkspaceType } from "./workspace/FormWorkspace.js";
68
+ export type { FormWorkspaceField, FormWorkspaceInput, FormWorkspaceSection, FormWorkspaceSlots, } from "./workspace/FormWorkspace.js";
69
+ export { GraphWorkspace, graphWorkspaceType } from "./workspace/GraphWorkspace.js";
70
+ export type { GraphWorkspaceEdge, GraphWorkspaceInput, GraphWorkspaceKind, GraphWorkspaceNode, GraphWorkspaceNodeAttribute, GraphWorkspaceSlots, } from "./workspace/GraphWorkspace.js";
71
+ export { allowAllPermissions, collectPermissionRefs, evaluatePermissions, gateStatus, isPermitted, toGateStatus, unknownPermissions, } from "./guard/permissions.js";
72
+ export type { PermissionDecision, PermissionEvaluation, PermissionGateStatus, PermissionResolver, SyncPermissionResolver, } from "./guard/permissions.js";
73
+ export { PermissionProvider, usePermission, usePermissionDecisions, } from "./guard/PermissionProvider.js";
74
+ export type { PermissionProviderProps } from "./guard/PermissionProvider.js";
75
+ export { RouteGuard } from "./guard/RouteGuard.js";
76
+ export type { RouteGuardProps } from "./guard/RouteGuard.js";
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @consciousclouds/operator-shell — the operator-console shell archetype
3
+ * (Layer 4 of the Frontend Platform).
4
+ *
5
+ * Frame + header + sidebar + nav engine + icon registry + OperatorFlavor
6
+ * types + permission-guard seam + the Workspace Framework (the main region's
7
+ * typed workspace seam: registry + host, fail-closed) + the Chief region
8
+ * (panel chrome over
9
+ * @consciousclouds/assistant-surface; transport injected via a TurnAdapter
10
+ * typed against the conductor-sdk event vocabulary). Mechanism only: no BFF
11
+ * route, no gateway URL, no personality default, no credential logic — the
12
+ * product injects meaning through Flavor, Brand, TurnAdapter, and the
13
+ * permission resolver. See docs/design/operator-platform-contracts.md and
14
+ * docs/design/frontend-platform-doctrine.md.
15
+ */
16
+ // The frame
17
+ export { OperatorShell } from "./frame/OperatorShell.js";
18
+ // Header chrome (exported for composition; the frame mounts them by default)
19
+ export { OperatorHeader } from "./header/OperatorHeader.js";
20
+ export { OperatorProfileMenu } from "./header/OperatorProfileMenu.js";
21
+ export { ThemeToggle } from "./header/ThemeToggle.js";
22
+ // Environment switcher — header chrome over the published
23
+ // @consciousclouds/frontend-runtime context (consumed as-is): the PRODUCT
24
+ // mounts RuntimeProvider with its targets (URLs/transport stay product code —
25
+ // membrane); the shell renders labels + connection state from useRuntime.
26
+ // No provider ⇒ no chrome (fail-closed); one environment ⇒ an honest
27
+ // single-entry indicator; >1 named targets ⇒ a dropdown over switchTo.
28
+ export { EnvironmentSwitcher } from "./header/EnvironmentSwitcher.js";
29
+ // Sidebar / nav engine
30
+ export { OperatorSidebar } from "./sidebar/OperatorSidebar.js";
31
+ export { deriveGatedNavGroups, flavorRoutes, isNavItemActive, isRouteInConsole, } from "./nav/routes.js";
32
+ // Icon Platform — the string-name → icon resolution seam (icons/registry.ts
33
+ // holds the full contract): the Flavor declares inert string names; the
34
+ // product extends the vocabulary via the `icons` shell prop (extensions may
35
+ // override built-ins); unknown names fail closed to the deterministic
36
+ // UNKNOWN_ICON (own-property lookup — prototype names are unknown too). The
37
+ // Brand's inert `iconFamily` declaration is read by the frame and resolved
38
+ // through resolveIconFamily — the shell ships ONE family (lucide, per the
39
+ // license allowlist), so unshipped declarations read-and-default to it.
40
+ export { OPERATOR_ICONS, SHIPPED_ICON_FAMILY, UNKNOWN_ICON, resolveIcon, resolveIconFamily, } from "./icons/registry.js";
41
+ // Command palette — the shell-owned ⌘K palette (registry `command`/cmdk via
42
+ // @consciousclouds/ui): route commands auto-derived from flavor.nav, inert
43
+ // flavor.commands references, product-injected `runCommand` execution, and
44
+ // the SAME fail-closed permission gate as the sidebar (derivePaletteGroups
45
+ // is the pure, provable derivation).
46
+ export { CommandPalette } from "./palette/CommandPalette.js";
47
+ export { derivePaletteGroups } from "./palette/commands.js";
48
+ // Search sources — the doctrine skeleton's Search experience as a typed
49
+ // injection: the product injects `SearchSource` values through the shell's
50
+ // `searchSources` prop (product code — `query` runs the product's own reads;
51
+ // no transport here), the palette renders their results alongside the
52
+ // command groups under the SAME fail-closed permission snapshot, and an
53
+ // erroring/in-flight/absent source contributes NOTHING
54
+ // (querySearchSources + useSearchResults are the provable core; a result's
55
+ // action navigates or opens the inspector by entity kind — which keeps its
56
+ // own fail-closed gate).
57
+ export { isSearchResult, permittedSearchSources, querySearchSources, } from "./palette/search-sources.js";
58
+ export { useSearchResults } from "./palette/use-search-results.js";
59
+ // Inspector — the shell-owned detail panel (open/close/focus over the sheet
60
+ // primitive, keyed by entity kind): the Flavor DECLARES entity-kind
61
+ // references (`flavor.inspector.entityKinds`, inert), the product INJECTS
62
+ // the views (`inspectorViews` shell prop), pages open it via `useInspector`.
63
+ // Undeclared or view-less kinds fail closed — no panel, no crash
64
+ // (resolveInspectorView is the pure, provable gate).
65
+ export { InspectorProvider, useInspector } from "./inspector/InspectorProvider.js";
66
+ export { resolveInspectorView } from "./inspector/types.js";
67
+ // The AI Region — Chief's home in the shell. ChiefRegion resolves
68
+ // `flavor.chief.placement` ('rail' | 'drawer') to a presentation; BOTH
69
+ // presentations run the identical turn flow (useChiefTurn over the injected
70
+ // TurnAdapter — P1-1 — with the conductor event vocabulary and the
71
+ // routed-directive guard) and render the identical body (ChiefSession).
72
+ // Rail = the always-open inflow panel; drawer = the same content behind the
73
+ // sheet primitive with assistant-surface's open/close lifecycle. Below the
74
+ // xl breakpoint the rail placement falls back to the drawer (the rail is
75
+ // CSS-hidden there — Chief stays reachable).
76
+ export { ChiefRegion } from "./chief/ChiefRegion.js";
77
+ export { ChiefPanel } from "./chief/ChiefPanel.js";
78
+ export { ChiefDrawer } from "./chief/ChiefDrawer.js";
79
+ export { ChiefSession } from "./chief/ChiefSession.js";
80
+ export { useChiefTurn } from "./chief/use-chief-turn.js";
81
+ // Chief invocation parity — the shell-owned Chief keybinding (⌘J / Ctrl+J),
82
+ // the AI Region's ⌘K twin: rail focuses the composer, drawer (declared or the
83
+ // below-xl fallback) toggles through assistant-surface's open/close
84
+ // lifecycle; exactly one presentation mounts, so exactly one listener.
85
+ // `isChiefShortcut` is the pure, provable match rule (shift/alt refuse —
86
+ // ⌘⇧J stays the browser's).
87
+ export { CHIEF_SHORTCUT_KEY, CHIEF_SHORTCUT_LABEL, isChiefShortcut, useChiefShortcut, } from "./chief/use-chief-shortcut.js";
88
+ export { directiveToHref } from "./chief/directive.js";
89
+ // Workspace Framework — the main-region seam (frame-free subtree; a typed
90
+ // workspace-type contract + immutable registry + host that fails closed on
91
+ // unknown types). The nine V1 type ids are declared in WORKSPACE_TYPE_IDS.
92
+ export { WorkspaceHost, WorkspaceUnavailable } from "./workspace/WorkspaceHost.js";
93
+ export { createWorkspaceRegistry } from "./workspace/registry.js";
94
+ export { WORKSPACE_TYPE_IDS, isWorkspaceTypeId } from "./workspace/types.js";
95
+ // Canvas workspace type — the first-class canvas workspace: hosting state
96
+ // machine (error → loading → empty → ready) over the published
97
+ // @consciousclouds/canvas-runtime CanvasRenderer (consumed, never rebuilt);
98
+ // the product injects the ComponentMap + loading/error/empty slot content.
99
+ export { CanvasWorkspace, canvasWorkspaceType } from "./workspace/CanvasWorkspace.js";
100
+ // Dashboard workspace type — stat/overview widget-slot composition of the
101
+ // graduated workspace components (StatCard grid + titled ReactNode widget
102
+ // sections); same fail-closed state machine, every value product-supplied.
103
+ export { DashboardWorkspace, dashboardWorkspaceType, } from "./workspace/DashboardWorkspace.js";
104
+ // Table workspace type — tabular exploration hosting the graduated
105
+ // InteractiveDataTable composite (sorting · pagination · loading · empty),
106
+ // with a fail-closed error state layered above it.
107
+ export { TableWorkspace, tableWorkspaceType } from "./workspace/TableWorkspace.js";
108
+ // Form workspace type — structured input over the presentational forms set
109
+ // (Field vocabulary); controls, validation judgment, and submission
110
+ // transport stay product-owned. Ships as mechanism (no CCU write surface yet).
111
+ export { FormWorkspace, formWorkspaceType } from "./workspace/FormWorkspace.js";
112
+ // Graph workspace type — entity-relationship exploration over a typed
113
+ // nodes/edges contract, rendered as adjacency-style traversal composed from
114
+ // registry primitives (no visualization dependency — react-flow/d3 sit
115
+ // outside the license allowlist). Dangling edge endpoints fail closed.
116
+ export { GraphWorkspace, graphWorkspaceType } from "./workspace/GraphWorkspace.js";
117
+ // Permission-guard seam (§5) — the shell owns the fail-closed gating
118
+ // BEHAVIOR (loading / denied / redirect states), the product injects the
119
+ // RESOLUTION (sync or async: `PermissionResolver` may return a
120
+ // Promise<PermissionDecision>; while it's in flight nav shows a skeleton,
121
+ // the palette hides the entry, RouteGuard shows its loading state — and a
122
+ // rejection/throw is DENIED). The frame mounts PermissionProvider with the
123
+ // injected resolver so pages gate through usePermission / RouteGuard without
124
+ // ever holding the resolver themselves. `evaluatePermissions` / `gateStatus`
125
+ // are the pure, provable core.
126
+ export { allowAllPermissions, collectPermissionRefs, evaluatePermissions, gateStatus, isPermitted, toGateStatus, unknownPermissions, } from "./guard/permissions.js";
127
+ export { PermissionProvider, usePermission, usePermissionDecisions, } from "./guard/PermissionProvider.js";
128
+ export { RouteGuard } from "./guard/RouteGuard.js";
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * InspectorProvider — the shell-owned detail panel (the Inspector region of
3
+ * the operator experience). Owns the open/close/focus lifecycle over the
4
+ * registry `sheet` primitive (Radix Dialog: focus trap, focus restore,
5
+ * Esc-to-close, overlay dismiss) and mounts the product's registered view
6
+ * for the opened entity kind.
7
+ *
8
+ * The provider is MECHANISM only: it resolves `kind` against the Flavor's
9
+ * declared entity-kind references and the product-injected view registry
10
+ * (see types.ts) and renders the resolved component with the mount contract
11
+ * (`kind` / `entity` / `close`). It interprets nothing about the entity.
12
+ *
13
+ * FAIL-CLOSED twice over:
14
+ * - `open()` on an undeclared or view-less kind returns false and renders
15
+ * nothing — no panel, no crash.
16
+ * - `useInspector()` outside a provider returns an inert API (`open` →
17
+ * false) instead of throwing, so a component composed outside the shell
18
+ * degrades to "no inspector here".
19
+ */
20
+ import * as React from "react";
21
+ import type { InspectorApi, InspectorViewRegistry } from "./types.js";
22
+ /**
23
+ * The shell-owned inspector handle. Safe anywhere: outside an
24
+ * InspectorProvider it returns the inert fail-closed API.
25
+ */
26
+ export declare function useInspector(): InspectorApi;
27
+ export interface InspectorProviderProps {
28
+ /**
29
+ * The Flavor's declared entity-kind REFERENCES (inert strings) — the frame
30
+ * passes `flavor.inspector.entityKinds`. Undeclared kinds never open.
31
+ */
32
+ entityKinds?: readonly string[];
33
+ /**
34
+ * The product-injected view registry keyed by those references (components
35
+ * are product code — they can't live in a Flavor).
36
+ */
37
+ views?: InspectorViewRegistry;
38
+ children: React.ReactNode;
39
+ }
40
+ export declare function InspectorProvider({ entityKinds, views, children, }: InspectorProviderProps): import("react/jsx-runtime").JSX.Element;
41
+ //# sourceMappingURL=InspectorProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorProvider.d.ts","sourceRoot":"","sources":["../../src/inspector/InspectorProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EACV,YAAY,EAEZ,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAapB;;;GAGG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAE3C;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,KAAK,EACL,QAAQ,GACT,EAAE,sBAAsB,2CA6DxB"}
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * InspectorProvider — the shell-owned detail panel (the Inspector region of
5
+ * the operator experience). Owns the open/close/focus lifecycle over the
6
+ * registry `sheet` primitive (Radix Dialog: focus trap, focus restore,
7
+ * Esc-to-close, overlay dismiss) and mounts the product's registered view
8
+ * for the opened entity kind.
9
+ *
10
+ * The provider is MECHANISM only: it resolves `kind` against the Flavor's
11
+ * declared entity-kind references and the product-injected view registry
12
+ * (see types.ts) and renders the resolved component with the mount contract
13
+ * (`kind` / `entity` / `close`). It interprets nothing about the entity.
14
+ *
15
+ * FAIL-CLOSED twice over:
16
+ * - `open()` on an undeclared or view-less kind returns false and renders
17
+ * nothing — no panel, no crash.
18
+ * - `useInspector()` outside a provider returns an inert API (`open` →
19
+ * false) instead of throwing, so a component composed outside the shell
20
+ * degrades to "no inspector here".
21
+ */
22
+ import * as React from "react";
23
+ import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "@consciousclouds/ui";
24
+ import { resolveInspectorView } from "./types.js";
25
+ /** The inert outside-a-provider API: nothing opens, nothing throws. */
26
+ const NO_INSPECTOR = {
27
+ open: () => false,
28
+ close: () => { },
29
+ isOpen: false,
30
+ canInspect: () => false,
31
+ };
32
+ const InspectorContext = React.createContext(NO_INSPECTOR);
33
+ /**
34
+ * The shell-owned inspector handle. Safe anywhere: outside an
35
+ * InspectorProvider it returns the inert fail-closed API.
36
+ */
37
+ export function useInspector() {
38
+ return React.useContext(InspectorContext);
39
+ }
40
+ export function InspectorProvider({ entityKinds, views, children, }) {
41
+ const [open, setOpen] = React.useState(false);
42
+ // The last accepted request stays mounted through the close animation.
43
+ const [request, setRequest] = React.useState(null);
44
+ const declared = React.useMemo(() => entityKinds ?? [], [entityKinds]);
45
+ const api = React.useMemo(() => ({
46
+ open: (req) => {
47
+ // The one fail-closed gate: Flavor-declared AND product-injected.
48
+ if (resolveInspectorView(req.kind, declared, views) == null)
49
+ return false;
50
+ setRequest(req);
51
+ setOpen(true);
52
+ return true;
53
+ },
54
+ close: () => setOpen(false),
55
+ isOpen: open,
56
+ canInspect: (kind) => resolveInspectorView(kind, declared, views) != null,
57
+ }), [declared, views, open]);
58
+ // Re-resolve at render (never a captured component): pulling a view out of
59
+ // the registry closes an already-open panel's content path too.
60
+ const View = request ? resolveInspectorView(request.kind, declared, views) : null;
61
+ return (_jsxs(InspectorContext.Provider, { value: api, children: [children, _jsx(Sheet, { open: open && View != null, onOpenChange: setOpen, children: _jsx(SheetContent, { side: "right", className: "w-full gap-0 overflow-y-auto sm:max-w-md", "data-inspector-kind": request?.kind, children: request && View ? (_jsxs(_Fragment, { children: [_jsxs(SheetHeader, { className: "border-b", children: [_jsx(SheetTitle, { children: request.title ?? request.kind }), request.description ? (_jsx(SheetDescription, { children: request.description })) : (_jsx(SheetDescription, { className: "sr-only", children: "Detail inspector" }))] }), _jsx("div", { className: "flex-1 p-4", children: _jsx(View, { kind: request.kind, entity: request.entity, close: () => setOpen(false) }) })] })) : null }) })] }));
62
+ }
63
+ //# sourceMappingURL=InspectorProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorProvider.js","sourceRoot":"","sources":["../../src/inspector/InspectorProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Inspector — the type contract (the shell's detail-panel seam), per the
3
+ * Operator Platform contract skeleton (frontend-platform-doctrine.md):
4
+ * "Inspector / detail — the platform owns inspector-panel behavior and
5
+ * open/close; the product fills the detail views registered for its
6
+ * entities."
7
+ *
8
+ * The split, verbatim from the membrane:
9
+ * - The SHELL owns the panel — open/close/focus lifecycle over the sheet
10
+ * primitive, keyed by ENTITY KIND.
11
+ * - The FLAVOR declares inspector REFERENCES — the entity-kind ids this
12
+ * surface may inspect (inert strings; components can't live in a Flavor,
13
+ * Declarative-Flavor law).
14
+ * - The PRODUCT injects the view components through a shell-prop registry
15
+ * keyed by those references (the same injection pattern as icons, the
16
+ * permission resolver, and `runCommand`).
17
+ *
18
+ * FAIL-CLOSED: opening a kind the Flavor never declared, or one no injected
19
+ * view resolves, does nothing — no panel, no crash (the inspector dual of
20
+ * the WorkspaceHost's unavailable state and the palette's hidden
21
+ * runner-less commands).
22
+ *
23
+ * The inspector presents ALREADY-RESOLVED data: the opener hands it the
24
+ * entity (from a read the page already holds). The shell never fetches — a
25
+ * detail view that needs more data fetches on the product's side of the
26
+ * membrane.
27
+ */
28
+ import type * as React from "react";
29
+ /**
30
+ * The mount contract — what every registered inspector view receives from
31
+ * the shell when its entity kind is opened.
32
+ */
33
+ export interface InspectorViewProps<TEntity = unknown> {
34
+ /** The entity-kind reference this view was registered under. */
35
+ kind: string;
36
+ /**
37
+ * The already-resolved entity the opener supplied — opaque to the shell,
38
+ * typed by the product's view (meaning belongs to the product).
39
+ */
40
+ entity: TEntity;
41
+ /** Imperative close handle (the shell also closes on Esc / the ✕ / overlay). */
42
+ close: () => void;
43
+ }
44
+ /** A registered inspector view component (entity typing erased at the registry boundary). */
45
+ export type InspectorView = React.ComponentType<InspectorViewProps<any>>;
46
+ /**
47
+ * The product's view registry, injected as a shell prop and keyed by the
48
+ * Flavor's entity-kind references. Components live HERE (product code) —
49
+ * never in the Flavor.
50
+ */
51
+ export type InspectorViewRegistry = Record<string, InspectorView>;
52
+ /** What an opener passes to `useInspector().open(…)`. */
53
+ export interface InspectorOpenRequest<TEntity = unknown> {
54
+ /**
55
+ * The entity-kind reference — must be declared by the Flavor AND have an
56
+ * injected view, or the request fails closed (returns false, no panel).
57
+ */
58
+ kind: string;
59
+ /** The already-resolved entity the view will present. */
60
+ entity: TEntity;
61
+ /** Panel title (a11y-required; defaults to the kind reference). */
62
+ title?: string;
63
+ /** Optional one-line description rendered under the title. */
64
+ description?: string;
65
+ }
66
+ /** The shell-owned inspector API pages reach through `useInspector()`. */
67
+ export interface InspectorApi {
68
+ /**
69
+ * Open the inspector on an entity. Fail-closed: returns `true` and opens
70
+ * only when the kind is Flavor-declared and a view is injected; otherwise
71
+ * returns `false` and nothing renders.
72
+ */
73
+ open: (request: InspectorOpenRequest) => boolean;
74
+ /** Close the panel (idempotent). */
75
+ close: () => void;
76
+ /** Is the panel currently open? */
77
+ isOpen: boolean;
78
+ /**
79
+ * Would `open` succeed for this kind? Lets a page decide whether to draw
80
+ * an inspect affordance at all (same fail-closed derivation as `open`).
81
+ */
82
+ canInspect: (kind: string) => boolean;
83
+ }
84
+ /**
85
+ * The one fail-closed resolution both `open` and `canInspect` share: a kind
86
+ * inspects only when the Flavor DECLARED it (the inert reference) and the
87
+ * product INJECTED a view for it (the implementation). Pure and exported so
88
+ * the gate is provable without a DOM.
89
+ */
90
+ export declare function resolveInspectorView(kind: string, declaredKinds: readonly string[], views: InspectorViewRegistry | undefined): InspectorView | null;
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/inspector/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,OAAO;IACnD,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,6FAA6F;AAE7F,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAElE,yDAAyD;AACzD,MAAM,WAAW,oBAAoB,CAAC,OAAO,GAAG,OAAO;IACrD;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,IAAI,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC;IACjD,oCAAoC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GACvC,aAAa,GAAG,IAAI,CAItB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Inspector — the type contract (the shell's detail-panel seam), per the
3
+ * Operator Platform contract skeleton (frontend-platform-doctrine.md):
4
+ * "Inspector / detail — the platform owns inspector-panel behavior and
5
+ * open/close; the product fills the detail views registered for its
6
+ * entities."
7
+ *
8
+ * The split, verbatim from the membrane:
9
+ * - The SHELL owns the panel — open/close/focus lifecycle over the sheet
10
+ * primitive, keyed by ENTITY KIND.
11
+ * - The FLAVOR declares inspector REFERENCES — the entity-kind ids this
12
+ * surface may inspect (inert strings; components can't live in a Flavor,
13
+ * Declarative-Flavor law).
14
+ * - The PRODUCT injects the view components through a shell-prop registry
15
+ * keyed by those references (the same injection pattern as icons, the
16
+ * permission resolver, and `runCommand`).
17
+ *
18
+ * FAIL-CLOSED: opening a kind the Flavor never declared, or one no injected
19
+ * view resolves, does nothing — no panel, no crash (the inspector dual of
20
+ * the WorkspaceHost's unavailable state and the palette's hidden
21
+ * runner-less commands).
22
+ *
23
+ * The inspector presents ALREADY-RESOLVED data: the opener hands it the
24
+ * entity (from a read the page already holds). The shell never fetches — a
25
+ * detail view that needs more data fetches on the product's side of the
26
+ * membrane.
27
+ */
28
+ /**
29
+ * The one fail-closed resolution both `open` and `canInspect` share: a kind
30
+ * inspects only when the Flavor DECLARED it (the inert reference) and the
31
+ * product INJECTED a view for it (the implementation). Pure and exported so
32
+ * the gate is provable without a DOM.
33
+ */
34
+ export function resolveInspectorView(kind, declaredKinds, views) {
35
+ if (!declaredKinds.includes(kind))
36
+ return null;
37
+ const view = views?.[kind];
38
+ return view ?? null;
39
+ }
40
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/inspector/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAiEH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,aAAgC,EAChC,KAAwC;IAExC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The nav engine's pure route logic. The Flavor declares routes; everything
3
+ * the shell decides about them (active state, the Chief in-console set) is
4
+ * DERIVED here — no hardcoded route lists anywhere in the shell.
5
+ */
6
+ import type { OperatorNavGroup, OperatorNavItem } from "../flavor/types.js";
7
+ import type { PermissionGateStatus } from "../guard/permissions.js";
8
+ /**
9
+ * The set of console route hrefs derived from the Flavor's nav — the source
10
+ * of truth for what this console serves (replaces the reference shell's
11
+ * hardcoded IN_CONSOLE_ROUTES).
12
+ */
13
+ export declare function flavorRoutes(nav: OperatorNavGroup[]): Set<string>;
14
+ /** Whether an href (query string ignored) is part of the console's route set. */
15
+ export declare function isRouteInConsole(routes: Set<string>, href: string): boolean;
16
+ /**
17
+ * Active-state rule, carried over from the reference shell verbatim:
18
+ * `/` matches exactly; any other href matches by prefix.
19
+ */
20
+ export declare function isNavItemActive(href: string, pathname: string): boolean;
21
+ /** A nav item paired with what its gate shows right now (denied never appears). */
22
+ export interface GatedNavItem {
23
+ item: OperatorNavItem;
24
+ status: Extract<PermissionGateStatus, "allowed" | "loading">;
25
+ }
26
+ /** A nav group after gating; groups whose items all vanished are dropped. */
27
+ export interface GatedNavGroup {
28
+ group: OperatorNavGroup;
29
+ items: GatedNavItem[];
30
+ }
31
+ /**
32
+ * The sidebar's pure gating derivation (contracts §5), provable without a
33
+ * DOM: each item reads the live decisions map through `gateStatus` —
34
+ * `denied`/unknown items DO NOT EXIST in the output (hidden, never
35
+ * disabled), `loading` items keep their slot (the sidebar renders a
36
+ * skeleton), and a group left with nothing vanishes with its label.
37
+ */
38
+ export declare function deriveGatedNavGroups(nav: OperatorNavGroup[], decisions: Readonly<Record<string, PermissionGateStatus>>): GatedNavGroup[];
39
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/nav/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGpE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEjE;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,gBAAgB,EAAE,EACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,GACxD,aAAa,EAAE,CAYjB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The nav engine's pure route logic. The Flavor declares routes; everything
3
+ * the shell decides about them (active state, the Chief in-console set) is
4
+ * DERIVED here — no hardcoded route lists anywhere in the shell.
5
+ */
6
+ import { gateStatus } from "../guard/permissions.js";
7
+ /**
8
+ * The set of console route hrefs derived from the Flavor's nav — the source
9
+ * of truth for what this console serves (replaces the reference shell's
10
+ * hardcoded IN_CONSOLE_ROUTES).
11
+ */
12
+ export function flavorRoutes(nav) {
13
+ return new Set(nav.flatMap((group) => group.items.map((item) => item.href)));
14
+ }
15
+ /** Whether an href (query string ignored) is part of the console's route set. */
16
+ export function isRouteInConsole(routes, href) {
17
+ return routes.has(href.split("?")[0] ?? href);
18
+ }
19
+ /**
20
+ * Active-state rule, carried over from the reference shell verbatim:
21
+ * `/` matches exactly; any other href matches by prefix.
22
+ */
23
+ export function isNavItemActive(href, pathname) {
24
+ return href === "/" ? pathname === "/" : pathname.startsWith(href);
25
+ }
26
+ /**
27
+ * The sidebar's pure gating derivation (contracts §5), provable without a
28
+ * DOM: each item reads the live decisions map through `gateStatus` —
29
+ * `denied`/unknown items DO NOT EXIST in the output (hidden, never
30
+ * disabled), `loading` items keep their slot (the sidebar renders a
31
+ * skeleton), and a group left with nothing vanishes with its label.
32
+ */
33
+ export function deriveGatedNavGroups(nav, decisions) {
34
+ return nav
35
+ .map((group) => ({
36
+ group,
37
+ items: group.items
38
+ .map((item) => {
39
+ const status = gateStatus(item.requiredPermission, decisions);
40
+ return status === "denied" ? null : { item, status };
41
+ })
42
+ .filter((entry) => entry !== null),
43
+ }))
44
+ .filter(({ items }) => items.length > 0);
45
+ }
46
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/nav/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,IAAY;IAChE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAuB,EACvB,SAAyD;IAEzD,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;aACf,GAAG,CAAC,CAAC,IAAI,EAAuB,EAAE;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAC9D,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACvD,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAyB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;KAC5D,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { OperatorFlavor } from "../flavor/types.js";
2
+ import type { PermissionResolver } from "../guard/permissions.js";
3
+ import type { IconRegistry } from "../icons/registry.js";
4
+ import type { SearchSource } from "./search-sources.js";
5
+ export interface CommandPaletteProps {
6
+ /** The surface manifest — nav derives the route commands; `commands` adds references. */
7
+ flavor: OperatorFlavor;
8
+ /**
9
+ * The product's permission resolution (§5), sync or async — the palette
10
+ * gates exactly like the sidebar (an in-flight async decision is DENIED
11
+ * here until it resolves; fail-closed while loading).
12
+ */
13
+ resolvePermission: PermissionResolver;
14
+ /** Product icon-vocabulary extensions for the registry. */
15
+ icons?: IconRegistry;
16
+ /**
17
+ * The resolved icon family (the frame reads the Brand's inert
18
+ * `iconFamily` declaration and resolves it via `resolveIconFamily`).
19
+ * Absent ⇒ the shipped family — same deterministic default.
20
+ */
21
+ iconFamily?: string;
22
+ /**
23
+ * Product-injected executor for `command`-reference entries. Without it,
24
+ * those entries are hidden (fail-closed) — `href` entries still navigate.
25
+ */
26
+ runCommand?: (commandRef: string) => void;
27
+ /**
28
+ * Product-injected searchable sources (search-sources.ts) — the Search
29
+ * experience's injection slot. Absent ⇒ the palette is commands-only.
30
+ * Pass a STABLE array (module const / memo): identity is the re-query key.
31
+ */
32
+ searchSources?: readonly SearchSource[];
33
+ /** Controlled open state (the frame owns it; ⌘K toggles through onOpenChange). */
34
+ open: boolean;
35
+ onOpenChange: (open: boolean) => void;
36
+ /** Input placeholder copy. */
37
+ placeholder?: string;
38
+ }
39
+ export declare function CommandPalette({ flavor, resolvePermission, icons, iconFamily, runCommand, searchSources, open, onOpenChange, placeholder, }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element;
40
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/palette/CommandPalette.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAA0B,MAAM,yBAAyB,CAAC;AAG1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKzD,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG5E,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,kFAAkF;IAClF,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,iBAAiB,EACjB,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,WAAyC,GAC1C,EAAE,mBAAmB,2CAwHrB"}