@almadar/shell-web 1.2.1 → 1.3.1

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 (82) hide show
  1. package/dist/AvlGlyph-6MA7AZBV.js +5 -0
  2. package/dist/AvlStateMachine-JC7L7XE4.js +8 -0
  3. package/dist/AvlTransitionDetail-DYNDVWPG.js +10 -0
  4. package/dist/AvlTransitionExplainer-2UZQADBO.js +11 -0
  5. package/dist/BehaviorView-GEXFDDJ4.js +10 -0
  6. package/dist/{FileTree-B3GDAjaQ.d.ts → FileTree-CYtJ4yHB.d.ts} +12 -2
  7. package/dist/FlowCanvas-FINBI4XQ.js +23 -0
  8. package/dist/{GameAudioProvider-BgWOOYT3.d.ts → GameAudioProvider-B8FBcGVE.d.ts} +1 -1
  9. package/dist/{KernelEngineContext-BPx-q0iw.d.ts → KernelEngineContext-6l6vkc50.d.ts} +1 -1
  10. package/dist/LayersPanel-RPYIG5OC.js +6 -0
  11. package/dist/ModuleCard-7WXCBELY.js +6 -0
  12. package/dist/OrbInspector-F5X7ZBNB.js +23 -0
  13. package/dist/OrbPreview-LQCUPAHB.js +23 -0
  14. package/dist/OrbPreview-V4VLWNMT.css +1754 -0
  15. package/dist/{Select-BJ8Fgc8A.d.ts → Select-DuX0Gvwo.d.ts} +14 -8
  16. package/dist/UISlotRenderer-RUI64CSS.js +23 -0
  17. package/dist/auth/react/index.js +4 -0
  18. package/dist/avl/index.d.ts +2 -2
  19. package/dist/avl/index.js +31 -31
  20. package/dist/{chunk-7UCL26QB.js → chunk-2X2SUH6H.js} +4 -4
  21. package/dist/{chunk-TAEOMNDK.js → chunk-6RVHS7VA.js} +44916 -44208
  22. package/dist/{chunk-RDPELAFQ.js → chunk-7GGUX2ER.js} +4 -4
  23. package/dist/{chunk-3YUMGEEW.js → chunk-AYQKZFUH.js} +1 -1
  24. package/dist/{chunk-S3LS3B7N.js → chunk-CB4POLGP.js} +1 -1
  25. package/dist/{chunk-LINJRTNB.js → chunk-FC3MXAFJ.js} +2 -2
  26. package/dist/{chunk-2LNXLMK3.js → chunk-FZOX7XTU.js} +41 -41
  27. package/dist/{chunk-CCO2ZH7F.js → chunk-GC7BGA5F.js} +3 -3
  28. package/dist/{chunk-ZDRDJKYB.js → chunk-MXN32OVV.js} +212 -20
  29. package/dist/{chunk-D5FJU4XC.js → chunk-OOG33EGF.js} +46 -14
  30. package/dist/{chunk-AU7O65OX.js → chunk-OXHXISFA.js} +1 -1
  31. package/dist/{chunk-PWXZN5G5.js → chunk-PD5QUVRE.js} +2 -2
  32. package/dist/{chunk-GHAF7QUD.js → chunk-QZ6TDP6I.js} +1 -1
  33. package/dist/{chunk-HA2BYO5E.js → chunk-R5Z655B4.js} +2 -2
  34. package/dist/{chunk-JEN4EIUF.js → chunk-RCB4CKRK.js} +1 -1
  35. package/dist/{chunk-AL2XXMYR.js → chunk-RQH6O76X.js} +20 -6
  36. package/dist/{chunk-3UQNFRYV.js → chunk-SO2MERCZ.js} +20 -25
  37. package/dist/{chunk-DPDKBY6Z.js → chunk-SVIH6ICP.js} +2 -1
  38. package/dist/{chunk-UFQLHCFJ.js → chunk-SZJEUMQ2.js} +2 -2
  39. package/dist/{chunk-V5SVGUYN.js → chunk-TDSE2L4F.js} +2 -2
  40. package/dist/{chunk-PCR37T3U.js → chunk-UUHF7XOZ.js} +9 -5
  41. package/dist/{chunk-B23EZH2P.js → chunk-VC5BOBVE.js} +3 -3
  42. package/dist/{chunk-LKL5RULQ.js → chunk-VQQEFPNX.js} +3 -2
  43. package/dist/{chunk-6RXP5ZXE.js → chunk-YNF2LH2I.js} +8 -8
  44. package/dist/{chunk-KTYOYEVA.js → chunk-YU2ZNLGI.js} +1 -1
  45. package/dist/{chunk-3DA36FOA.js → chunk-ZR2UDQOR.js} +2 -2
  46. package/dist/components/index.d.ts +295 -22
  47. package/dist/components/index.js +30 -25
  48. package/dist/context/index.js +3 -3
  49. package/dist/core.d.ts +23 -6
  50. package/dist/core.js +1 -1
  51. package/dist/{fx-Bx5RqplG.d.ts → fx-Bc3yEVED.d.ts} +2 -2
  52. package/dist/hooks/index.js +4 -4
  53. package/dist/index.d.ts +18 -5
  54. package/dist/index.js +4 -4
  55. package/dist/{kernel-client-NMZ56JVU.js → kernel-client-NSTJKR2U.js} +84 -35
  56. package/dist/{kernel-wire-CRsHtLsf.d.ts → kernel-wire-Ds7xSZzx.d.ts} +6 -0
  57. package/dist/lib/index.d.ts +2 -2
  58. package/dist/lib/index.js +3 -3
  59. package/dist/providers/index.d.ts +5 -5
  60. package/dist/providers/index.js +18 -18
  61. package/dist/runtime/index.d.ts +6 -2
  62. package/dist/runtime/index.js +17 -17
  63. package/dist/ssr/index.cjs +27 -4
  64. package/dist/ssr/index.d.cts +6 -0
  65. package/dist/ssr/index.d.ts +6 -0
  66. package/dist/ssr/index.js +27 -4
  67. package/dist/test-support.js +2 -2
  68. package/dist/{verificationRegistry-BLuQU1JV.d.ts → verificationRegistry-Dz5N0oxx.d.ts} +199 -8
  69. package/package.json +9 -9
  70. package/src/core/locales/ar.json +8 -1
  71. package/src/core/locales/en.json +8 -1
  72. package/src/core/locales/sl.json +8 -1
  73. package/dist/AvlGlyph-KZMJDBEB.js +0 -5
  74. package/dist/AvlStateMachine-KVZMFHFU.js +0 -8
  75. package/dist/AvlTransitionDetail-7DVGV27I.js +0 -10
  76. package/dist/AvlTransitionExplainer-RMJ5LQLK.js +0 -11
  77. package/dist/BehaviorView-EYRPME67.js +0 -10
  78. package/dist/FlowCanvas-J54627TC.js +0 -23
  79. package/dist/LayersPanel-PSXI4EHG.js +0 -6
  80. package/dist/ModuleCard-TNRLL45H.js +0 -6
  81. package/dist/OrbInspector-UBEQWWZ2.js +0 -23
  82. package/dist/UISlotRenderer-5OURMAP2.js +0 -23
@@ -1,32 +1,32 @@
1
1
  "use client";
2
2
  export { assertUniqueSlotsPerHost } from '../chunk-5QTYQTPS.js';
3
- export { BehaviorView } from '../chunk-B23EZH2P.js';
4
- export { ModuleCard } from '../chunk-7UCL26QB.js';
5
- import { JsonTreeEditor } from '../chunk-JEN4EIUF.js';
6
- export { JsonTreeEditor } from '../chunk-JEN4EIUF.js';
7
- export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, usePreview, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTickVisibility, useTraitListens, useUIEvents, useValidation } from '../chunk-PWXZN5G5.js';
8
- import { resolveSheetDirection, frameRect, GridPicker, FormSection } from '../chunk-TAEOMNDK.js';
9
- export { Card as ActionCard, ActionPalette, ActionTile, ActivationBlock, ActivityRail, AgentActivityFeed, AgentActivityRow, AgentChatFeed, AgentThinkingRow, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AuthLayout, BiologyCanvas, BloomQuizBlock, BranchingLogicBuilder, Breadcrumb, ButtonGroup, COMPACT_MEDIA_QUERY, CalendarGrid, Canvas, Canvas2D, Carousel, ChangeList, Chart, ChartLegend, ChatBar, ChemistryCanvas, ChoiceButton, CodeBlock, CodeRunnerPanel, CommandPalette, CommitRow, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTION_KEYS, DEFAULT_MATRIX_COLUMN_KEYS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DateRangePicker, DateRangeSelector, DetailPanel, DialogueBubble, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DockLayout, DocumentDetails, DocumentPanel, DocumentViewer, StateMachineView as DomStateMachineVisualizer, DrawFxLayer, DrawGroup, DrawMesh, DrawShape, DrawShapeLayer, DrawSkinnedMesh, DrawSprite, DrawSpriteLayer, DrawText, DrawTextLayer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EmojiPicker, ErrorBoundary, ErrorState, FEATURE_COLORS, FLOOR_HEIGHT, FeatureCard, FeatureGrid, FilterGroup, Flex, FlipCard, FloatingActionButton, FloatingToolbar, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, FxOverlay, GameAudioContext, GameAudioCue, GameAudioProvider, GameAudioToggle, GameHud, GameMenu, GameShell, Gantt, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, GuestView, Header, HealthBar, IconButton, ImportPreviewTree, ImportProgress, ImportSourcePicker, InputGroup, JazariStateMachine, LearningCanvas, Lightbox, LikertScale, LineChart, LoadingState, MachinePanel, MapView, MarkdownContent, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, Navigation, NumberStepper, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, PageHeader, PageTransition, Pagination, PhysicsCanvas, PositionedCanvas, ProgressDots, PullToRefresh, QrScanner, QuizBlock, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichTextEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SegmentRenderer, SequenceBar, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SkeletonTree, SlotContentRenderer, SocialProof, SortableList, Split, SplitPane, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, SubagentTracePanel, SwipeableRow, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagInput, Timeline, TimerDisplay, Toast, ToastSlot, TopNavItem, TraitFrame, TraitSlot, TraitStateViewer, UISlotComponent, UISlotRenderer, UploadDropZone, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, activityRowFacts, applyCompletion, applySuggestions, createUnitAnimationState, dispatchCommandPaletteCommand, getCurrentFrame, groupIntoConversations, inferDirection, isoToScreen, parseEditFocus, parseMarkdownWithCodeBlocks, preloadCodeHighlighter, registerCodeLanguageLoader, renderPatternValue, resolveFrame, resolveSheetDirection, sanitizeRichHtml, screenToIso, tickAnimationState, toCodeLanguage, transitionAnimation, useCamera, useCompactLayout, useDockLayout, useGameAudio, useGameAudioContext, useImageCache } from '../chunk-TAEOMNDK.js';
10
- export { FileTree } from '../chunk-AL2XXMYR.js';
11
- import '../chunk-RDPELAFQ.js';
12
- import '../chunk-CCO2ZH7F.js';
13
- import '../chunk-DPDKBY6Z.js';
14
- export { Accordion } from '../chunk-3DA36FOA.js';
15
- export { EmptyState } from '../chunk-3YUMGEEW.js';
16
- import '../chunk-HA2BYO5E.js';
17
- import '../chunk-PCR37T3U.js';
18
- import { ThemedPortal } from '../chunk-V5SVGUYN.js';
19
- export { Popover, Tooltip } from '../chunk-V5SVGUYN.js';
20
- import '../chunk-3UQNFRYV.js';
21
- import '../chunk-LKL5RULQ.js';
3
+ export { BehaviorView } from '../chunk-VC5BOBVE.js';
4
+ export { ModuleCard } from '../chunk-2X2SUH6H.js';
5
+ import { JsonTreeEditor } from '../chunk-RCB4CKRK.js';
6
+ export { JsonTreeEditor } from '../chunk-RCB4CKRK.js';
7
+ export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, usePreview, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTickVisibility, useTraitListens, useUIEvents, useValidation } from '../chunk-PD5QUVRE.js';
8
+ import { resolveSheetDirection, frameRect, GridPicker, FormSection } from '../chunk-6RVHS7VA.js';
9
+ export { Card as ActionCard, ActionPalette, ActionTile, ActivationBlock, ActivityRail, AgentActivityFeed, AgentActivityRow, AgentChatFeed, AgentThinkingRow, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AnnotatedMedia, AuthLayout, BiologyCanvas, BloomQuizBlock, BranchingLogicBuilder, Breadcrumb, ButtonGroup, COMPACT_MEDIA_QUERY, CalendarGrid, Canvas, Canvas2D, Carousel, ChangeList, Chart, ChartLegend, ChatBar, ChemistryCanvas, ChoiceButton, CodeBlock, CodeRunnerPanel, CommandPalette, CommitRow, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTION_KEYS, DEFAULT_MATRIX_COLUMN_KEYS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DateRangePicker, DateRangeSelector, DetailPanel, DialogueBubble, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DockLayout, DocumentDetails, DocumentPanel, DocumentViewer, StateMachineView as DomStateMachineVisualizer, DrawFxLayer, DrawGroup, DrawMesh, DrawShape, DrawShapeLayer, DrawSkinnedMesh, DrawSprite, DrawSpriteLayer, DrawText, DrawTextLayer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EmojiPicker, ErrorBoundary, ErrorState, FEATURE_COLORS, FLOOR_HEIGHT, FeatureCard, FeatureGrid, FilterGroup, Flex, FlipCard, FloatingActionButton, FloatingToolbar, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, FxOverlay, GameAudioContext, GameAudioCue, GameAudioProvider, GameAudioToggle, GameHud, GameMenu, GameShell, Gantt, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, GuestView, Header, HealthBar, IconButton, ImportPreviewTree, ImportProgress, ImportSourcePicker, InputGroup, JazariStateMachine, LearningCanvas, Lightbox, LikertScale, LineChart, LoadingState, MachinePanel, MapView, MarkdownContent, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, Navigation, NumberStepper, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, PageHeader, PageTransition, Pagination, PhysicsCanvas, PositionedCanvas, ProgressDots, PullToRefresh, QrScanner, QuizBlock, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichTextEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SegmentRenderer, SequenceBar, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SkeletonTree, SlotContentRenderer, SocialProof, SortableList, Split, SplitPane, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, SubagentTracePanel, SwipeableRow, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagInput, Timeline, TimerDisplay, Toast, ToastSlot, TopNavItem, TraitFrame, TraitSlot, TraitStateViewer, UISlotComponent, UISlotRenderer, UploadDropZone, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, activityRowFacts, applyCompletion, applySuggestions, createUnitAnimationState, dispatchCommandPaletteCommand, getCurrentFrame, groupIntoConversations, inferDirection, isoToScreen, parseEditFocus, parseMarkdownWithCodeBlocks, preloadCodeHighlighter, registerCodeLanguageLoader, renderPatternValue, resolveFrame, resolveSheetDirection, sanitizeRichHtml, screenToIso, tickAnimationState, toCodeLanguage, transitionAnimation, useCamera, useCompactLayout, useDockLayout, useGameAudio, useGameAudioContext, useImageCache } from '../chunk-6RVHS7VA.js';
10
+ export { FileTree } from '../chunk-RQH6O76X.js';
11
+ import '../chunk-7GGUX2ER.js';
12
+ import '../chunk-GC7BGA5F.js';
13
+ import '../chunk-SVIH6ICP.js';
14
+ export { Accordion } from '../chunk-ZR2UDQOR.js';
15
+ export { EmptyState } from '../chunk-AYQKZFUH.js';
16
+ import '../chunk-R5Z655B4.js';
17
+ import '../chunk-UUHF7XOZ.js';
18
+ import { ThemedPortal } from '../chunk-TDSE2L4F.js';
19
+ export { Popover, Tooltip } from '../chunk-TDSE2L4F.js';
20
+ import '../chunk-SO2MERCZ.js';
21
+ import '../chunk-VQQEFPNX.js';
22
22
  import '../chunk-TZZBINQY.js';
23
- import '../chunk-ZDRDJKYB.js';
24
- export { claimDelivery, keyChord, mergeCaptureTables, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useKeyboardRouter, useLongPress, usePageHead, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-S3LS3B7N.js';
25
- export { ALMADAR_DND_MIME, useDraggable, useDropZone } from '../chunk-GHAF7QUD.js';
26
- import '../chunk-2LNXLMK3.js';
23
+ import '../chunk-MXN32OVV.js';
24
+ export { claimDelivery, keyChord, mergeCaptureTables, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useKeyboardRouter, useLongPress, usePageHead, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-CB4POLGP.js';
25
+ export { ALMADAR_DND_MIME, useDraggable, useDropZone } from '../chunk-QZ6TDP6I.js';
26
+ import '../chunk-FZOX7XTU.js';
27
27
  import '../chunk-3BBUBJFF.js';
28
28
  export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-ANTJUQRD.js';
29
- import { VStack, Button, HStack, GameIcon, Typography, Box, useTranslate, Badge, Icon, cn, Select, domPassthrough, Switch, Input } from '../chunk-D5FJU4XC.js';
29
+ import { VStack, Button, HStack, GameIcon, Typography, Box, useTranslate, Badge, Icon, cn, Select, domPassthrough, Switch, Input } from '../chunk-OOG33EGF.js';
30
30
  import { getKnownPatterns, getPatternDefinition } from '../chunk-ECC3WQIB.js';
31
31
  import '../chunk-AZ74UPG6.js';
32
32
  import '../chunk-G7DCAZ22.js';
@@ -1104,4 +1104,9 @@ var EntityDisplayEvents = {
1104
1104
  DESELECT: "DESELECT"
1105
1105
  };
1106
1106
 
1107
- export { ALL_PRESETS, AssetPicker, Coachmark, CollapsibleSection, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EntityDisplayEvents, FEATURE_TYPES, IconPicker, NodeSlotEditor, OnboardingSpotlight, PropertyInspector, StatusBar, TERRAIN_COLORS, TerrainPalette, boardEntity, bool, calculateAttackTargets, calculateValidMoves, createInitialGameState, makeAsset, makeAssetMap, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, pendulum, projectileMotion, rows, springOscillator, str, unitHealth, unitPosition, unitTeam, useAnchorRect, useUnitSpriteAtlas, vec2 };
1107
+ // src/components/game/atoms/DrawEmitter.tsx
1108
+ function DrawEmitter(_props) {
1109
+ return null;
1110
+ }
1111
+
1112
+ export { ALL_PRESETS, AssetPicker, Coachmark, CollapsibleSection, DrawEmitter, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EntityDisplayEvents, FEATURE_TYPES, IconPicker, NodeSlotEditor, OnboardingSpotlight, PropertyInspector, StatusBar, TERRAIN_COLORS, TerrainPalette, boardEntity, bool, calculateAttackTargets, calculateValidMoves, createInitialGameState, makeAsset, makeAssetMap, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, pendulum, projectileMotion, rows, springOscillator, str, unitHealth, unitPosition, unitTeam, useAnchorRect, useUnitSpriteAtlas, vec2 };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- export { DesignThemeProvider, useDesignTheme } from '../chunk-KTYOYEVA.js';
3
- export { ANONYMOUS_USER, ARBITRARY_CLASS_STYLE_ID, ArbitraryClassCompilerProvider, CurrentPagePathContext, CurrentPagePathProvider, OrbitalThemeProvider, UISlotContext, UISlotProvider, UserContext, UserProvider, useArbitraryClassStyles, useCurrentPagePath, useHasPermission, useHasRole, useSlotContent, useSlotHasContent, useUISlots, useUser, useUserForEvaluation } from '../chunk-2LNXLMK3.js';
2
+ export { DesignThemeProvider, useDesignTheme } from '../chunk-YU2ZNLGI.js';
3
+ export { ANONYMOUS_USER, ARBITRARY_CLASS_STYLE_ID, ArbitraryClassCompilerProvider, CurrentPagePathContext, CurrentPagePathProvider, OrbitalThemeProvider, UISlotContext, UISlotProvider, UserContext, UserProvider, useArbitraryClassStyles, useCurrentPagePath, useHasPermission, useHasRole, useSlotContent, useSlotHasContent, useUISlots, useUser, useUserForEvaluation } from '../chunk-FZOX7XTU.js';
4
4
  export { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-3BBUBJFF.js';
5
5
  import '../chunk-ANTJUQRD.js';
6
- import '../chunk-D5FJU4XC.js';
6
+ import '../chunk-OOG33EGF.js';
7
7
  import '../chunk-AZ74UPG6.js';
8
8
  import '../chunk-G7DCAZ22.js';
package/dist/core.d.ts CHANGED
@@ -2,9 +2,9 @@ import * as React$1 from 'react';
2
2
  import React__default, { RefObject } from 'react';
3
3
  import { A11yProps, AssetUrl, EventKey, TextureAtlas, Tilesheet, SpriteSheetAtlas, EventPayload, EventEmit, FieldValue, SExpr, Asset, OrbitalSchema, OrbitalPage, NavStackEntry, IconFamily as IconFamily$1, JsonValue, SurfaceMode } from '@almadar/core';
4
4
  export { BusEvent, BusEventListener, BusEventSource, BusEventListener as EventListener, SurfaceMode, Unsubscribe, comparePathSpecificity, matchPath, matchPathAmong } from '@almadar/core';
5
- import { I as IconInput } from './fx-Bx5RqplG.js';
6
- export { B as Badge, b as BadgeColor, c as BadgeProps, d as BadgeSize, e as BadgeVariant, C as CONFETTI_BURST_KEYFRAMES, f as CONFETTI_COLORS, g as ColorToken, h as ConfettiParticle, D as DisplayField, i as DisplayFieldFormat, j as DisplayFieldVariant, F as FxItem, k as FxLifecycle, l as FxOverlayItem, m as FxOverlayKind, a as FxPreset, n as FxProceduralShape, o as FxSpace, p as FxView, q as Icon, r as IconAnimation, s as IconProps, t as IconSize, u as ImageSource, L as LinkAction, P as Point, R as Rect, U as UiError, v as createConfettiParticles, w as fxHash01, x as fxLifecycle, y as isColorToken, z as resolveColorToken, A as resolveFxView, E as resolveIcon } from './fx-Bx5RqplG.js';
7
- export { B as Button, a as ButtonProps, b as ButtonSize, c as ButtonVariant, I as Input, d as InputProps, P as PatternTile, e as PatternTileProps, f as PatternVariant, S as Select, g as SelectOption, h as SelectOptionGroup, i as SelectProps, j as getTileDimensions } from './Select-BJ8Fgc8A.js';
5
+ import { I as IconInput } from './fx-Bc3yEVED.js';
6
+ export { B as Badge, b as BadgeColor, c as BadgeProps, d as BadgeSize, e as BadgeVariant, C as CONFETTI_BURST_KEYFRAMES, f as CONFETTI_COLORS, g as ColorToken, h as ConfettiParticle, D as DisplayField, i as DisplayFieldFormat, j as DisplayFieldVariant, F as FxItem, k as FxLifecycle, l as FxOverlayItem, m as FxOverlayKind, a as FxPreset, n as FxProceduralShape, o as FxSpace, p as FxView, q as Icon, r as IconAnimation, s as IconProps, t as IconSize, u as ImageSource, L as LinkAction, P as Point, R as Rect, U as UiError, v as createConfettiParticles, w as fxHash01, x as fxLifecycle, y as isColorToken, z as resolveColorToken, A as resolveFxView, E as resolveIcon } from './fx-Bc3yEVED.js';
7
+ export { B as Button, a as ButtonProps, b as ButtonSize, c as ButtonVariant, I as Input, d as InputProps, P as PatternTile, e as PatternTileProps, f as PatternVariant, S as Select, g as SelectOption, h as SelectOptionGroup, i as SelectProps, j as getTileDimensions } from './Select-DuX0Gvwo.js';
8
8
  export { E as EventBusContext, a as EventBusContextType, b as EventBusContextTypeExtended, c as EventBusProvider, V as VideoEmbed, d as VideoEmbedProps, e as VideoErrorPayload, f as VideoPlayPayload, g as VideoReadyPayload, h as getGlobalEventBus, s as setGlobalEventBus, u as useEmitEvent, i as useEventBus, j as useEventListener, k as useEventSubscription, l as useRootEventBus } from './EventBusProvider-BFFHfN4O.js';
9
9
  import { ClassValue } from 'clsx';
10
10
  import { LucideIcon } from 'lucide-react';
@@ -335,6 +335,9 @@ interface BoxMarquee {
335
335
  /** Repeat the content right after itself so the strip never runs out; without it the content leaves and starts over */
336
336
  loop: boolean;
337
337
  }
338
+ /**
339
+ * @layoutOnly
340
+ */
338
341
  interface BoxProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, keyof A11yProps>, A11yProps {
339
342
  /** Additional CSS classes applied to the root element. */
340
343
  className?: string;
@@ -454,6 +457,9 @@ declare const CardContent: React__default.ForwardRefExoticComponent<React__defau
454
457
  declare const CardBody: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
455
458
  declare const CardFooter: React__default.ForwardRefExoticComponent<React__default.HTMLAttributes<HTMLDivElement> & React__default.RefAttributes<HTMLDivElement>>;
456
459
 
460
+ /**
461
+ * @layoutOnly
462
+ */
457
463
  interface CenterProps extends A11yProps {
458
464
  /** Center inline (width fits content) vs block (full width) */
459
465
  inline?: boolean;
@@ -1088,6 +1094,9 @@ declare const SectionHeader: React__default.FC<SectionHeaderProps>;
1088
1094
  */
1089
1095
 
1090
1096
  type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';
1097
+ /**
1098
+ * @layoutOnly
1099
+ */
1091
1100
  interface SpacerProps extends A11yProps {
1092
1101
  /** Fixed size (auto = flex grow) */
1093
1102
  size?: SpacerSize;
@@ -1162,6 +1171,9 @@ type StackDirection = "horizontal" | "vertical";
1162
1171
  type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
1163
1172
  type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
1164
1173
  type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
1174
+ /**
1175
+ * @layoutOnly
1176
+ */
1165
1177
  interface StackProps extends Omit<React__default.AriaAttributes, keyof A11yProps>, A11yProps {
1166
1178
  /** Stack direction */
1167
1179
  direction?: StackDirection;
@@ -1244,7 +1256,7 @@ declare const StatusDot: React__default.ForwardRefExoticComponent<StatusDotProps
1244
1256
  /**
1245
1257
  * @accessibleName label
1246
1258
  * @role switch
1247
- * @tokens --color-primary --color-muted --color-background
1259
+ * @tokens --color-primary --color-muted-foreground --color-background
1248
1260
  * @motion css
1249
1261
  */
1250
1262
  interface SwitchProps extends A11yProps {
@@ -1252,7 +1264,9 @@ interface SwitchProps extends A11yProps {
1252
1264
  defaultChecked?: boolean;
1253
1265
  onChange?: (checked: boolean) => void;
1254
1266
  /** Declarative event name — emits UI:{action} with `actionPayload` and the new `checked` value on toggle */
1255
- action?: EventKey;
1267
+ action?: EventEmit<{
1268
+ checked: boolean;
1269
+ }>;
1256
1270
  /** Payload to include with the action event (the new `checked` is added to it)
1257
1271
  * @payloadFor action
1258
1272
  */
@@ -1345,7 +1359,10 @@ interface TextareaProps extends Omit<React__default.TextareaHTMLAttributes<HTMLT
1345
1359
  placeholder?: string;
1346
1360
  /** Number of visible rows */
1347
1361
  rows?: number;
1348
- /** Controlled value, for a field the program fills or clears. */
1362
+ /** Controlled value, for a field the program fills or clears.
1363
+ * @changedBy onChange
1364
+ * @changedBy action
1365
+ */
1349
1366
  value?: string;
1350
1367
  /** Declarative event: fires on ⌘/Ctrl+Enter with `{ value }`. */
1351
1368
  action?: EventEmit<{
package/dist/core.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- export { AnimatedGraphic, AnimatedReveal, Aside, AtlasImage, AtlasPanel, Avatar, BAND_ACCENT_FALLBACK, BAND_EDGE_FILL, BAND_SHAPES, BUILT_IN_THEMES, Badge, Box, Button, CONFETTI_BURST_KEYFRAMES, CONFETTI_COLORS, Card, CardBody, CardContent, CardFooter, CardHeader, CardTitle, Center, Checkbox, ConditionalWrapper, ConfettiEffect, DEFAULT_CURRENCY, DayCell, Dialog, Divider, EventBusContext, EventBusProvider, FilterPill, FlipContainer, GameIcon, HStack, I18nProvider, INLINE_TEXT_ATTR, Icon, Image, InfiniteScrollSentinel, Input, Label, LawReferenceTooltip, NavStackProvider, NavStackRouterBridge, NavigationProvider, Overlay, PatternTile, PendingScopeContext, Presence, ProgressBar, Radio, RangeSlider, STRETCHED_ABOVE, STRETCHED_CONTROL, SVG_MOTION_CLASSES, SectionHeader, Select, Spacer, Sparkline, Spinner, Stack, StatusDot, SurfaceBoundary, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, Switch, THEME_SCALE_KEYS, TextHighlight, Textarea, ThemeProvider, ThemeScopeContext, ThemeToggle, TimeSlotCell, TraitScopeProvider, TrendIndicator, TypewriterText, Typography, VStack, VideoEmbed, atlasFailed, atlasUrlOf, bandEdgeHeight, bandEdgeLayerStyle, bandEdgeMask, bandPadding, beginPending, blit, boxesOf, cn, compareCellValues, comparePathSpecificity, coreMessages, createConfettiParticles, createTraitPresence, createTranslate, cssTimeMs, domPassthrough, endPending, entriesFor, evaluateBinding, evaluateBindings, extractRouteParams, findPageByName, findPageByPath, followHref, formatDate, formatDateTime, formatTime, formatValue, fxHash01, fxLifecycle, getAllPages, getAtlas, getCurrentIconFamily, getDefaultPage, getGlobalEventBus, getTileDimensions, getTraitPresence, guardsHold, isAbsoluteHref, isAtlasAsset, isColorToken, isInertNavStack, isMotionEnabled, isPending, isSpriteSheetAtlas, kebabToPascal, keyInViewerMode, layoutScale, localeMeta, lucideIconKey, matchNavPage, matchPath, matchPathAmong, mergeMessages, motionTiming, navLabelsFromItems, newPendingKey, pageEntryLabel, parseCalendarDate, pathMatches, presenceGroup, pressableProps, previousEntry, registryKeyMode, registryKeyTheme, relabelCurrent, resolveAssetSource, resolveColorToken, resolveEntryLabels, resolveFxView, resolveIcon, resolveIconForFamily, resolveLucideByName, rowActivationProps, rowOpenControlProps, setGlobalEventBus, sortRows, subRectFor, subscribePending, svgMotionClass, syncNavStack, themeHasMode, toDateInputValue, toDateTimeInputValue, useActivePage, useAnimateChanges, useAtlasSliceDataUrl, useContentSurface, useDialogBehavior, useEmitEvent, useEventBus, useEventListener, useEventSubscription, useFormatContext, useIconFamily, useInfiniteScroll, useInitPayload, useMediaQuery, useNavStack, useNavigateTo, useNavigation, useNavigationId, useNavigationState, useOnSurface, usePendingAction, usePendingRows, usePendingScopeValue, usePrefersReducedMotion, usePresence, useRenderI18n, useResolvedIcon, useRootEventBus, useScopeHasPending, useScopedMode, useTapReveal, useTheme, useThemeIconStrokeApplies, useThemeScope, useTraitScope, useTraitScopeChain, useTranslate } from './chunk-D5FJU4XC.js';
2
+ export { AnimatedGraphic, AnimatedReveal, Aside, AtlasImage, AtlasPanel, Avatar, BAND_ACCENT_FALLBACK, BAND_EDGE_FILL, BAND_SHAPES, BUILT_IN_THEMES, Badge, Box, Button, CONFETTI_BURST_KEYFRAMES, CONFETTI_COLORS, Card, CardBody, CardContent, CardFooter, CardHeader, CardTitle, Center, Checkbox, ConditionalWrapper, ConfettiEffect, DEFAULT_CURRENCY, DayCell, Dialog, Divider, EventBusContext, EventBusProvider, FilterPill, FlipContainer, GameIcon, HStack, I18nProvider, INLINE_TEXT_ATTR, Icon, Image, InfiniteScrollSentinel, Input, Label, LawReferenceTooltip, NavStackProvider, NavStackRouterBridge, NavigationProvider, Overlay, PatternTile, PendingScopeContext, Presence, ProgressBar, Radio, RangeSlider, STRETCHED_ABOVE, STRETCHED_CONTROL, SVG_MOTION_CLASSES, SectionHeader, Select, Spacer, Sparkline, Spinner, Stack, StatusDot, SurfaceBoundary, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, Switch, THEME_SCALE_KEYS, TextHighlight, Textarea, ThemeProvider, ThemeScopeContext, ThemeToggle, TimeSlotCell, TraitScopeProvider, TrendIndicator, TypewriterText, Typography, VStack, VideoEmbed, atlasFailed, atlasUrlOf, bandEdgeHeight, bandEdgeLayerStyle, bandEdgeMask, bandPadding, beginPending, blit, boxesOf, cn, compareCellValues, comparePathSpecificity, coreMessages, createConfettiParticles, createTraitPresence, createTranslate, cssTimeMs, domPassthrough, endPending, entriesFor, evaluateBinding, evaluateBindings, extractRouteParams, findPageByName, findPageByPath, followHref, formatDate, formatDateTime, formatTime, formatValue, fxHash01, fxLifecycle, getAllPages, getAtlas, getCurrentIconFamily, getDefaultPage, getGlobalEventBus, getTileDimensions, getTraitPresence, guardsHold, isAbsoluteHref, isAtlasAsset, isColorToken, isInertNavStack, isMotionEnabled, isPending, isSpriteSheetAtlas, kebabToPascal, keyInViewerMode, layoutScale, localeMeta, lucideIconKey, matchNavPage, matchPath, matchPathAmong, mergeMessages, motionTiming, navLabelsFromItems, newPendingKey, pageEntryLabel, parseCalendarDate, pathMatches, presenceGroup, pressableProps, previousEntry, registryKeyMode, registryKeyTheme, relabelCurrent, resolveAssetSource, resolveColorToken, resolveEntryLabels, resolveFxView, resolveIcon, resolveIconForFamily, resolveLucideByName, rowActivationProps, rowOpenControlProps, setGlobalEventBus, sortRows, subRectFor, subscribePending, svgMotionClass, syncNavStack, themeHasMode, toDateInputValue, toDateTimeInputValue, useActivePage, useAnimateChanges, useAtlasSliceDataUrl, useContentSurface, useDialogBehavior, useEmitEvent, useEventBus, useEventListener, useEventSubscription, useFormatContext, useIconFamily, useInfiniteScroll, useInitPayload, useMediaQuery, useNavStack, useNavigateTo, useNavigation, useNavigationId, useNavigationState, useOnSurface, usePendingAction, usePendingRows, usePendingScopeValue, usePrefersReducedMotion, usePresence, useRenderI18n, useResolvedIcon, useRootEventBus, useScopeHasPending, useScopedMode, useTapReveal, useTheme, useThemeIconStrokeApplies, useThemeScope, useTraitScope, useTraitScopeChain, useTranslate } from './chunk-OOG33EGF.js';
3
3
  import './chunk-G7DCAZ22.js';
@@ -1,4 +1,4 @@
1
- import { A11yProps, Asset, AssetUrl, ScenePos } from '@almadar/core';
1
+ import { A11yProps, Asset, EntityFieldName, AssetUrl, ScenePos } from '@almadar/core';
2
2
  import React__default from 'react';
3
3
  import { LucideIcon } from 'lucide-react';
4
4
 
@@ -94,7 +94,7 @@ type DisplayFieldFormat = 'date' | 'time' | 'datetime' | 'currency' | 'number' |
94
94
  */
95
95
  interface DisplayField {
96
96
  /** Entity field name (dot-notation supported) */
97
- name: string;
97
+ name: EntityFieldName;
98
98
  /** Display label (the `name` as written if omitted) */
99
99
  label?: string;
100
100
  /** Icon shown beside the field */
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, usePreview, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTickVisibility, useTraitListens, useUIEvents, useValidation } from '../chunk-PWXZN5G5.js';
3
- export { claimDelivery, keyChord, mergeCaptureTables, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useKeyboardRouter, useLongPress, usePageHead, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-S3LS3B7N.js';
4
- export { ALMADAR_DND_MIME, useDraggable, useDropZone } from '../chunk-GHAF7QUD.js';
2
+ export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, usePreview, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTickVisibility, useTraitListens, useUIEvents, useValidation } from '../chunk-PD5QUVRE.js';
3
+ export { claimDelivery, keyChord, mergeCaptureTables, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useKeyboardRouter, useLongPress, usePageHead, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-CB4POLGP.js';
4
+ export { ALMADAR_DND_MIME, useDraggable, useDropZone } from '../chunk-QZ6TDP6I.js';
5
5
  export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-ANTJUQRD.js';
6
- import '../chunk-D5FJU4XC.js';
6
+ import '../chunk-OOG33EGF.js';
7
7
  import '../chunk-AZ74UPG6.js';
8
8
  import '../chunk-G7DCAZ22.js';
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ import { KernelEngine as KernelEngine$1 } from '@almadar/shell-runtime/kernel/en
15
15
  export * from '@almadar/shell-runtime/kernel/engine';
16
16
  import { KernelHostPorts, KernelAnswerScope } from '@almadar/shell-runtime/kernel/host';
17
17
  export * from '@almadar/shell-runtime/kernel/host';
18
- import { OrbitalSchema, EventRequest, EventResponse, MountSeed, OnDeviceModelPorts, BrowserTabPort, OrbitalDefinition, UISlot, AnyPatternConfig, ResolvedPatternProps, EventSource, SExpr, RuntimeValue } from '@almadar/core';
18
+ import { OrbitalSchema, PersistenceAdapter, EventRequest, EventResponse, MountSeed, OnDeviceModelPorts, BrowserTabPort, OrbitalDefinition, UISlot, AnyPatternConfig, ResolvedPatternProps, EventSource, SExpr, RuntimeValue } from '@almadar/core';
19
19
  export * from '@almadar/shell-runtime/kernel/program-effects';
20
20
  export * from '@almadar/shell-browser/page-facts';
21
21
  export * from '@almadar/shell-runtime/effects/on-device-model';
@@ -23,6 +23,7 @@ import { FramePostPort, FrameApplied } from '@almadar/shell-runtime/kernel/frame
23
23
  export * from '@almadar/shell-runtime/kernel/frame-applier';
24
24
  import { LocalFoldKernel } from '@almadar/shell-runtime/client/client-kernel';
25
25
  export { ClientDispatchHooks, ClientEmitOutcome, ClientKernel, ClientKernelOutcome, ClientMountHooks, ClientMountOutcome, LocalFoldKernel } from '@almadar/shell-runtime/client/client-kernel';
26
+ import { HeldValues } from '@almadar/shell-runtime/kernel/held-values';
26
27
  export * from '@almadar/shell-runtime/loader/schema-loader';
27
28
  export * from '@almadar/shell-runtime/loader/lazy-page';
28
29
  export * from '@almadar/shell-runtime/credentials/env-vars';
@@ -48,10 +49,10 @@ import { LocalKernelOptions, openLocalKernel as openLocalKernel$1 } from '@almad
48
49
  export { LocalKernelOptions, LocalStoreTransportOptions, createLocalStoreTransport, localStorePersistence, resolveLocalRows } from '@almadar/shell-runtime/runtime/evaluation/local-store-transport';
49
50
  export { ResidenceTransportOptions, createResidenceTransport } from '@almadar/shell-runtime/runtime/evaluation/residence-transport';
50
51
  import { KernelModule as KernelModule$1 } from './providers/index.js';
51
- import { IndexedDbPersistence } from '@almadar/shell-browser/storage';
52
+ import { ChangeRecord } from '@almadar/shell-browser/storage';
53
+ export { V as VerificationBus, b as bindEventBus, a as bindTraitStateGetter, e as ensureVerificationApi, g as getOrbitalVerification } from './verification-C5pTeMJv.js';
52
54
  export { w as wrapCallbackForEvent } from './wrapCallbackForEvent-B9QLbhxX.js';
53
55
  export { a as PERF_NAMESPACE, e as PerfDetail, f as PerfDetailValue, P as PerfEntry, c as clearPerf, p as perfEnd, g as perfGauge, b as perfStart, h as perfStore, d as perfTime, i as perfTimeAsync, j as pushPerfEntry } from './perf-Dr28-AgT.js';
54
- export { V as VerificationBus, b as bindEventBus, a as bindTraitStateGetter, e as ensureVerificationApi, g as getOrbitalVerification } from './verification-C5pTeMJv.js';
55
56
  export * from '@almadar/shell-runtime/events/EventBus';
56
57
  export * from '@almadar/shell-runtime/events/emit-stamp';
57
58
  import '@almadar/core/patterns';
@@ -84,6 +85,8 @@ interface TickFramePorts {
84
85
  client: LocalFoldKernel;
85
86
  /** Posts what fired ticks owe; `undefined` for a host with no transport (the frame then only folds locally). */
86
87
  post: FramePostPort | undefined;
88
+ /** The kernel's held render values (EXEC-DIST-16), which its frames name by reference. */
89
+ held: HeldValues;
87
90
  }
88
91
  /** One host frame: `Kernel.frame(now())`, then the applier. Shared by the poll driver and by hosts that step on demand. */
89
92
  declare function runTickFrame(ports: TickFramePorts, now: () => number): Promise<FrameApplied>;
@@ -107,6 +110,12 @@ declare function nativeMemoryPersistence(kernel: KernelModule): NativeMemoryPers
107
110
 
108
111
  declare function openLocalKernel(options: LocalKernelOptions): ReturnType<typeof openLocalKernel$1>;
109
112
 
113
+ /** Where a browser keeps rows between visits: it stores and returns whole rows, and answers no query. */
114
+ interface BrowserDatabase extends Pick<PersistenceAdapter, 'create' | 'delete' | 'list'> {
115
+ /** The write log: empty only for a database no visit has written to. */
116
+ changes(): Promise<readonly ChangeRecord[]>;
117
+ }
118
+
110
119
  /**
111
120
  * The browser store of a program's `[persistent: x, browser]` entities, opened once, and the in-process transport its legs run through. The runtime
112
121
  * host (`useBrowserStore`) and compiled static clients both open it here.
@@ -114,8 +123,12 @@ declare function openLocalKernel(options: LocalKernelOptions): ReturnType<typeof
114
123
 
115
124
  /** One browser database per app and viewer locale, so a visitor's records stay in one language. */
116
125
  declare function browserStoreName(appName: string, locale: string | undefined): string;
117
- /** Open the store; `null` when no entity is browser-stored. */
118
- declare function openBrowserStore(databaseName: string, orbitals: readonly OrbitalDefinition[], factory?: IDBFactory): Promise<IndexedDbPersistence | null>;
126
+ /** The rows of a browser-stored program, filed by collection: `persistedMemory`'s database over the app's IndexedDB. */
127
+ interface BrowserStore extends BrowserDatabase {
128
+ close(): void;
129
+ }
130
+ /** Open the store; `null` when no entity is browser-stored. Every entity bound to one collection shares its rows. A program once filed under `formerDatabaseName` has its rows moved in. */
131
+ declare function openBrowserStore(databaseName: string, orbitals: readonly OrbitalDefinition[], factory?: IDBFactory, formerDatabaseName?: string): Promise<BrowserStore | null>;
119
132
  interface BrowserStoreTransportOptions {
120
133
  databaseName: string;
121
134
  schema: OrbitalSchema;
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { runTickFrame, createTickDriver } from './chunk-AU7O65OX.js';
3
- export { createTickDriver, runTickFrame } from './chunk-AU7O65OX.js';
4
- import { wrapCallbackForEvent, validateSlotContent, local_store_transport_exports, pushPerfEntry, perfTimeAsync, perfTime, perfStore, perfStart, perfGauge, perfEnd, openLocalKernel, openBundledBrowserStore, openBrowserStoreTransport, openBrowserStore, openBrowserHost, nativeMemoryPersistence, getOrbitalVerification, eventRouteKey, ensureVerificationApi, createSlotSetter, createResidenceTransport, collectEmbeddedTraits, clearPerf, buildOrbitalsByTrait, browserStoreName, bindTraitStateGetter, bindEventBus, assertIsSlotManager, assertIsMultiSourceSlotManager, aggregateSlotContent, RendererContractViolationError, PERF_NAMESPACE, webHostActions } from './chunk-ZDRDJKYB.js';
5
- export { PERF_NAMESPACE, RendererContractViolationError, aggregateSlotContent, assertIsMultiSourceSlotManager, assertIsSlotManager, bindEventBus, bindTraitStateGetter, browserStoreName, buildOrbitalsByTrait, clearPerf, collectEmbeddedTraits, createResidenceTransport, createSlotSetter, ensureVerificationApi, eventRouteKey, getOrbitalVerification, nativeMemoryPersistence, openBrowserHost, openBrowserStore, openBrowserStoreTransport, openBundledBrowserStore, openLocalKernel, perfEnd, perfGauge, perfStart, perfStore, perfTime, perfTimeAsync, pushPerfEntry, validateSlotContent, wrapCallbackForEvent } from './chunk-ZDRDJKYB.js';
2
+ import { runTickFrame, createTickDriver } from './chunk-OXHXISFA.js';
3
+ export { createTickDriver, runTickFrame } from './chunk-OXHXISFA.js';
4
+ import { wrapCallbackForEvent, validateSlotContent, local_store_transport_exports, pushPerfEntry, perfTimeAsync, perfTime, perfStore, perfStart, perfGauge, perfEnd, openLocalKernel, openBundledBrowserStore, openBrowserStoreTransport, openBrowserStore, openBrowserHost, nativeMemoryPersistence, getOrbitalVerification, eventRouteKey, ensureVerificationApi, createSlotSetter, createResidenceTransport, collectEmbeddedTraits, clearPerf, buildOrbitalsByTrait, browserStoreName, bindTraitStateGetter, bindEventBus, assertIsSlotManager, assertIsMultiSourceSlotManager, aggregateSlotContent, RendererContractViolationError, PERF_NAMESPACE, webHostActions } from './chunk-MXN32OVV.js';
5
+ export { PERF_NAMESPACE, RendererContractViolationError, aggregateSlotContent, assertIsMultiSourceSlotManager, assertIsSlotManager, bindEventBus, bindTraitStateGetter, browserStoreName, buildOrbitalsByTrait, clearPerf, collectEmbeddedTraits, createResidenceTransport, createSlotSetter, ensureVerificationApi, eventRouteKey, getOrbitalVerification, nativeMemoryPersistence, openBrowserHost, openBrowserStore, openBrowserStoreTransport, openBundledBrowserStore, openLocalKernel, perfEnd, perfGauge, perfStart, perfStore, perfTime, perfTimeAsync, pushPerfEntry, validateSlotContent, wrapCallbackForEvent } from './chunk-MXN32OVV.js';
6
6
  import { __export, __reExport } from './chunk-G7DCAZ22.js';
7
7
  export * from '@almadar/shell-runtime/kernel/wire';
8
8
  export * from '@almadar/shell-runtime/kernel/decode';
@@ -1,12 +1,13 @@
1
- import { createTickDriver, runTickFrame } from './chunk-AU7O65OX.js';
2
- import { presenceGroup, getTraitPresence } from './chunk-D5FJU4XC.js';
1
+ import { createTickDriver, runTickFrame } from './chunk-OXHXISFA.js';
2
+ import { presenceGroup, getTraitPresence } from './chunk-OOG33EGF.js';
3
3
  import './chunk-G7DCAZ22.js';
4
4
  import { isJsonObject } from '@almadar/core';
5
- import { createLocalFold, paintResponse, traceResponse } from '@almadar/shell-runtime';
5
+ import { createLocalFold, traceResponse, paintResponse } from '@almadar/shell-runtime';
6
6
  import { TraitMountError } from '@almadar/shell-runtime/client/trait-mount-error';
7
7
  import { SessionEndedError } from '@almadar/shell-runtime/client/EventTransport';
8
8
  import { createLogger } from '@almadar/logger';
9
9
  import { decodeHeldCompletion } from '@almadar/shell-runtime/kernel/decode';
10
+ import { HeldValues } from '@almadar/shell-runtime/kernel/held-values';
10
11
 
11
12
  var log = createLogger("almadar:ui:kernel-client");
12
13
  var nextClientSerial = 0;
@@ -21,24 +22,59 @@ var defaultFrameScheduler = (callback) => {
21
22
  function parse(text) {
22
23
  return JSON.parse(text);
23
24
  }
25
+ var heldByKernel = /* @__PURE__ */ new WeakMap();
26
+ function heldOf(k) {
27
+ let held = heldByKernel.get(k);
28
+ if (held === void 0) {
29
+ held = new HeldValues();
30
+ heldByKernel.set(k, held);
31
+ }
32
+ return held;
33
+ }
34
+ function readAnswer(k, text) {
35
+ const held = heldOf(k);
36
+ held.release(k.heldReleased());
37
+ return held.read(text);
38
+ }
24
39
  function payloadJson(payload) {
25
40
  return payload === void 0 ? void 0 : JSON.stringify(payload);
26
41
  }
42
+ var foldTurnsByKernel = /* @__PURE__ */ new WeakMap();
43
+ function foldTurnsOf(k) {
44
+ let turns = foldTurnsByKernel.get(k);
45
+ if (turns === void 0) {
46
+ turns = /* @__PURE__ */ new Map();
47
+ foldTurnsByKernel.set(k, turns);
48
+ }
49
+ return turns;
50
+ }
51
+ var liveStoreByKernel = /* @__PURE__ */ new WeakMap();
52
+ function weakRoute(deliver) {
53
+ const route = new WeakRef(deliver);
54
+ return (json) => route.deref()?.(json);
55
+ }
27
56
  function createKernelClient(opts) {
28
- const { store, traitIndex, transport } = opts;
57
+ const { traitIndex, transport } = opts;
29
58
  let loaded;
59
+ const liveStore = () => loaded === void 0 ? opts.store : liveStoreByKernel.get(loaded) ?? opts.store;
60
+ const store = new Proxy(opts.store, { get: (_own, key) => Reflect.get(liveStore(), key) });
30
61
  const configs = /* @__PURE__ */ new Map();
62
+ let gpuCompletion;
31
63
  const ready = Promise.all([opts.instance, opts.gpu]).then(([k, gpu]) => {
32
64
  loaded = k;
33
- if (gpu !== void 0) k.installGpu(gpu, (json) => deliverGpuCompletion(k, json));
65
+ liveStoreByKernel.set(k, opts.store);
66
+ if (gpu !== void 0) {
67
+ gpuCompletion = (json) => deliverGpuCompletion(k, json);
68
+ k.installGpu(gpu, weakRoute(gpuCompletion));
69
+ }
34
70
  return k;
35
71
  });
36
72
  ready.catch(() => void 0);
37
73
  const visibleGroups = [...traitIndex.byName].filter(([, entry]) => entry.ticks.some((tick) => tick.whileVisible)).map(([name]) => [name, presenceGroup(traitIndex, name)]);
38
- const foldTurns = /* @__PURE__ */ new Map();
39
74
  const runQueuedFolds = (k) => {
75
+ const foldTurns = foldTurnsOf(k);
40
76
  for (let json = k.nextFold(); json !== void 0; json = k.nextFold()) {
41
- const next = parse(json);
77
+ const next = readAnswer(k, json);
42
78
  const turn = foldTurns.get(next.ticket);
43
79
  if (turn === void 0) throw new Error(`kernel wire: the kernel folded ticket ${next.ticket}, which nothing waits on`);
44
80
  foldTurns.delete(next.ticket);
@@ -46,13 +82,13 @@ function createKernelClient(opts) {
46
82
  else turn.ran(next.fold);
47
83
  }
48
84
  };
49
- const foldInOrder = (k, flight, answer, alreadyDeliveredJson, baseJson) => settleProgress(k, parse(k.foldInOrder(flight, JSON.stringify(answer), alreadyDeliveredJson, baseJson)));
50
- const deliverInOrder = (k, flight, emitted) => settleProgress(k, parse(k.deliverEmitToListeners(flight, JSON.stringify(emitted))));
51
- const deliverOriginInOrder = (k, flight, emitted) => settleProgress(k, parse(k.deliverOriginEmit(flight, JSON.stringify(emitted))));
85
+ const foldInOrder = (k, flight, answer, alreadyDeliveredJson, baseJson) => settleProgress(k, readAnswer(k, k.foldInOrder(flight, JSON.stringify(answer), alreadyDeliveredJson, baseJson)));
86
+ const deliverInOrder = (k, flight, emitted) => settleProgress(k, readAnswer(k, k.deliverEmitToListeners(flight, JSON.stringify(emitted))));
87
+ const deliverOriginInOrder = (k, flight, emitted) => settleProgress(k, readAnswer(k, k.deliverOriginEmit(flight, JSON.stringify(emitted))));
52
88
  const settleProgress = (k, progress) => {
53
89
  if (progress.status === "applied") return Promise.resolve(progress.fold);
54
90
  const turn = new Promise((ran, failed) => {
55
- foldTurns.set(progress.ticket, { ran, failed });
91
+ foldTurnsOf(k).set(progress.ticket, { ran, failed });
56
92
  });
57
93
  queueMicrotask(() => runQueuedFolds(k));
58
94
  return turn;
@@ -69,10 +105,11 @@ function createKernelClient(opts) {
69
105
  let scopeTail = Promise.resolve();
70
106
  const framesSince = (since) => {
71
107
  if (loaded === void 0) throw new Error("the kernel is not loaded");
72
- return parse(loaded.framesSince(since));
108
+ return readAnswer(loaded, loaded.framesSince(since));
73
109
  };
74
110
  const mirror = (response) => paintResponse(store, framesSince, response);
75
111
  const traceStreams = /* @__PURE__ */ new Set();
112
+ const costed = () => [...traceStreams].some((stream) => stream.cost);
76
113
  const movedTraits = (item) => {
77
114
  const dispatch = item["dispatch"];
78
115
  const outcomes = dispatch !== void 0 && dispatch !== null && isJsonObject(dispatch) ? dispatch["outcomes"] ?? null : null;
@@ -81,12 +118,17 @@ function createKernelClient(opts) {
81
118
  };
82
119
  const publishTrace = (k) => {
83
120
  if (traceStreams.size === 0) return;
84
- const items = parse(k.takeTrace());
85
- if (!Array.isArray(items)) return;
86
- for (const item of items) {
87
- if (item === null || !isJsonObject(item)) continue;
88
- const moved = movedTraits(item);
121
+ const views = parse(k.takeTraceViews());
122
+ if (!Array.isArray(views)) return;
123
+ for (const view of views) {
124
+ if (view === null || !isJsonObject(view)) continue;
125
+ const plain = view["plain"];
126
+ if (plain === void 0 || plain === null || !isJsonObject(plain)) continue;
127
+ const measured = view["costed"];
128
+ const costedItem = measured !== void 0 && measured !== null && isJsonObject(measured) ? measured : plain;
129
+ const moved = movedTraits(plain);
89
130
  for (const stream of traceStreams) {
131
+ const item = stream.cost ? costedItem : plain;
90
132
  if (moved.some((t) => stream.traits.has(t))) queueMicrotask(() => stream.onItem(item));
91
133
  }
92
134
  }
@@ -106,7 +148,7 @@ function createKernelClient(opts) {
106
148
  const snapshot = wire.snapshot;
107
149
  if (snapshot === null) return { clientEffectsByTrait: [] };
108
150
  const trait = wire.seed.trait;
109
- const repaint = parse(k.restore(trait, entityId, JSON.stringify(snapshot)));
151
+ const repaint = readAnswer(k, k.restore(trait, entityId, JSON.stringify(snapshot)));
110
152
  if (snapshot.state !== "") store.states.rollbackState(trait, snapshot.state, entityId, "server-rejected");
111
153
  mirror(repaint);
112
154
  store.notify();
@@ -154,7 +196,7 @@ function createKernelClient(opts) {
154
196
  } catch (err) {
155
197
  const seeds = mountedSeeds.get(orbital);
156
198
  if (!(err instanceof SessionEndedError) || seeds === void 0 || seeds.length === 0) throw err;
157
- const reseed = JSON.parse(k.reseedLeg(JSON.stringify(seeds), request.entityId));
199
+ const reseed = readAnswer(k, k.reseedLeg(JSON.stringify(seeds), request.entityId));
158
200
  const mounted = await transport.send(orbital, request.locale !== void 0 ? { ...reseed, locale: request.locale } : reseed);
159
201
  await foldAnswer(k, flight, mounted);
160
202
  store.notify();
@@ -172,7 +214,7 @@ function createKernelClient(opts) {
172
214
  if (transport === void 0) return out;
173
215
  const queue = [...legs];
174
216
  for (let planned = queue.shift(); planned !== void 0; planned = queue.shift()) {
175
- const shaped = planned.keepsState ? planned.leg : JSON.parse(k.statefulLeg(JSON.stringify(planned.leg)));
217
+ const shaped = planned.keepsState ? planned.leg : readAnswer(k, k.statefulLeg(JSON.stringify(planned.leg)));
176
218
  const sent = request.locale !== void 0 ? { ...shaped, locale: request.locale } : shaped;
177
219
  const base = k.foldBase(sent.entityByTrait !== void 0 ? JSON.stringify(sent.entityByTrait) : void 0, JSON.stringify(planned.foldSeeded), sent.entityId);
178
220
  let posted;
@@ -213,7 +255,7 @@ function createKernelClient(opts) {
213
255
  };
214
256
  out.success = out.success && posted.success;
215
257
  if (posted.error !== void 0) out.error = posted.error;
216
- out.rejections.push(...(fold.rejections ?? []).filter((r) => r.code === "effect-failed" || r.code === "repaint-failed"));
258
+ out.rejections.push(...(fold.rejections ?? []).filter((r) => r.code === "effect-failed" || r.code === "repaint-failed" || r.code === "cascade-capped"));
217
259
  }
218
260
  return out;
219
261
  };
@@ -254,14 +296,17 @@ function createKernelClient(opts) {
254
296
  frame: (nowMs) => {
255
297
  const presence = getTraitPresence();
256
298
  for (const [traitName, group] of visibleGroups) k.setTraitOnScreen(traitName, presence.state(group) !== "off-screen");
257
- return k.frame(nowMs);
299
+ const frame = k.frame(nowMs);
300
+ heldOf(k).release(k.heldReleased());
301
+ return frame;
258
302
  },
259
303
  framePause: () => k.framePause(),
260
304
  frameResume: () => k.frameResume(),
261
305
  tickCount: () => k.tickCount()
262
306
  },
263
307
  client: localFold,
264
- post: framePost(k)
308
+ post: framePost(k),
309
+ held: heldOf(k)
265
310
  });
266
311
  const dispatchOne = async (request, hooks, progress) => {
267
312
  const traitName = request.targetTrait;
@@ -269,13 +314,13 @@ function createKernelClient(opts) {
269
314
  const k = await ready;
270
315
  await scopeTail;
271
316
  if (request.runTick !== void 0) {
272
- const response = parse(k.tick(request.runTick.trait, request.runTick.tick, request.entityId));
317
+ const response = readAnswer(k, k.tick(request.runTick.trait, request.runTick.tick, request.entityId));
273
318
  publishTrace(k);
274
319
  mirror(response);
275
320
  store.notify();
276
321
  return { response, mode: parse(k.dispatchMode(request.runTick.trait)) };
277
322
  }
278
- const wire = parse(request.heldPayload !== void 0 ? k.dispatchHeld(traitName, request.entityId, request.event, request.heldPayload) : k.dispatch(traitName, request.entityId, request.event, payloadJson(request.payload)));
323
+ const wire = readAnswer(k, request.heldPayload !== void 0 ? k.dispatchHeld(traitName, request.entityId, request.event, request.heldPayload) : k.dispatch(traitName, request.entityId, request.event, payloadJson(request.payload)));
279
324
  try {
280
325
  return await settleDispatch(k, wire, request, hooks, progress);
281
326
  } finally {
@@ -419,12 +464,12 @@ function createKernelClient(opts) {
419
464
  const release = async (left) => {
420
465
  if (transport === void 0 || left.length === 0) return;
421
466
  await opts.topology;
422
- for (const { trait, orbital, leg } of left) {
423
- transport.send(orbital, leg).catch((err) => log.warn("unmount-post-failed", { trait, orbital, error: String(err) }));
467
+ for (const { traits, orbital, leg } of left) {
468
+ transport.send(orbital, leg).catch((err) => log.warn("unmount-post-failed", { traits, orbital, error: String(err) }));
424
469
  }
425
470
  };
426
471
  const client = {
427
- store,
472
+ store: opts.store,
428
473
  dispatch: (request, hooks) => dispatchOne(request, hooks !== void 0 ? [hooks] : [], false),
429
474
  dispatchProgress: (request) => dispatchOne(request, [], true),
430
475
  foldHostDispatch: async (request, response) => {
@@ -460,7 +505,7 @@ function createKernelClient(opts) {
460
505
  await scopeTail;
461
506
  const baseRequest = base ?? {};
462
507
  k.mount(JSON.stringify(seeds.map((s) => s.trait)));
463
- const mount = parse(k.dispatchMount(JSON.stringify(seeds), baseRequest.entityId, payloadJson(baseRequest.payload), baseRequest.route, baseRequest.crumb));
508
+ const mount = readAnswer(k, k.dispatchMount(JSON.stringify(seeds), baseRequest.entityId, payloadJson(baseRequest.payload), baseRequest.route, baseRequest.crumb));
464
509
  try {
465
510
  return await settleMount(k, mount, seeds, hooks, baseRequest);
466
511
  } finally {
@@ -471,15 +516,15 @@ function createKernelClient(opts) {
471
516
  routeMounts: async (routePath) => parse((await ready).routeMounts(routePath)),
472
517
  pageCircuit: async (page, route) => parse((await ready).pageCircuit(page, route)),
473
518
  enter: (routePath, mountKey, traits) => {
474
- const entered = scopeTail.then(() => ready).then((k) => parse(k.enter(routePath, `${clientSerial}\0${mountKey}`, JSON.stringify(traits))));
519
+ const entered = scopeTail.then(() => ready).then((k) => readAnswer(k, k.enter(routePath, `${clientSerial}\0${mountKey}`, JSON.stringify(traits))));
475
520
  scopeTail = entered.then(() => void 0, () => void 0);
476
521
  return entered.then((answer) => {
477
522
  void release(answer.left);
478
- return { seeds: answer.seeds, left: answer.left.map((l) => l.trait) };
523
+ return { seeds: answer.seeds, left: answer.left.flatMap((l) => l.traits) };
479
524
  });
480
525
  },
481
526
  leave: async () => {
482
- const left = scopeTail.then(() => ready).then((k) => parse(k.leave()));
527
+ const left = scopeTail.then(() => ready).then((k) => readAnswer(k, k.leave()));
483
528
  scopeTail = left.then(() => void 0, () => void 0);
484
529
  await release(await left);
485
530
  },
@@ -544,12 +589,16 @@ function createKernelClient(opts) {
544
589
  releases.forEach((release2) => release2());
545
590
  };
546
591
  },
547
- traceStream: (traits, onItem) => {
548
- const stream = { traits: new Set(traits), onItem };
592
+ traceStream: (traits, onItem, cost = false) => {
593
+ const stream = { traits: new Set(traits), onItem, cost };
549
594
  traceStreams.add(stream);
550
- void ready.then((k) => k.setTraceOn(true)).catch((error) => log.error("trace-stream-failed", { error: error.message }));
595
+ void ready.then((k) => {
596
+ k.setTraceOn(true);
597
+ k.setTraceCost(costed());
598
+ }).catch((error) => log.error("trace-stream-failed", { error: error.message }));
551
599
  return () => {
552
600
  traceStreams.delete(stream);
601
+ loaded?.setTraceCost(costed());
553
602
  if (traceStreams.size === 0) loaded?.setTraceOn(false);
554
603
  };
555
604
  },
@@ -28,6 +28,8 @@ interface KernelInstance {
28
28
  deliverOriginEmit(flight: number, emittedJson: string): string;
29
29
  /** The oldest queued answer that can fold now, folded: a `FoldedNextWire` as JSON, or `undefined` when none waits. */
30
30
  nextFold(): string | undefined;
31
+ /** The held render values (EXEC-DIST-16) the kernel let go of since the last call: a JSON array of ids. */
32
+ heldReleased(): string;
31
33
  /** The flight is done: its answers are folded, or the host gave up on them. */
32
34
  endFlight(flight: number): boolean;
33
35
  /** The rows a posted leg's answer is folded against; `undefined` when the leg carried none. */
@@ -62,6 +64,10 @@ interface KernelInstance {
62
64
  setTraceOn(on: boolean): void;
63
65
  /** The trace items recorded since the last take, in dispatch order: a JSON array. */
64
66
  takeTrace(): string;
67
+ /** Measure each recorded dispatch while on (EXEC-COST-1). */
68
+ setTraceCost(on: boolean): void;
69
+ /** The items recorded since the last take, each `{ plain, costed? }` (EXEC-COST-1): a JSON array. */
70
+ takeTraceViews(): string;
65
71
  /** Carry each frame response's `effectResults` (omitted otherwise), for a verifier. */
66
72
  setFrameEffectResults(carry: boolean): void;
67
73
  /** The kernel's mounts for a host start on `side` (`client|server|process|start`): `MountSeed[]` as JSON. */