@almadar/ui 6.58.0 → 6.61.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 (94) hide show
  1. package/dist/BehaviorValueFrame-3ORZHPWQ.css +1252 -0
  2. package/dist/BehaviorValueFrame-QTD7BWOI.js +18 -0
  3. package/dist/{Canvas3DHost-BTvRPfsr.d.ts → Canvas3DHost-CNjANoaU.d.ts} +1 -1
  4. package/dist/{GameAudioProvider-kXbonWTv.d.ts → GameAudioProvider-Dv_L-PHt.d.ts} +1 -1
  5. package/dist/TraitValueFrame-2WMYJOA5.css +1252 -0
  6. package/dist/TraitValueFrame-WOXNLLMM.js +17 -0
  7. package/dist/Typography-BY4A2NBY.js +5 -0
  8. package/dist/{UISlotRenderer-N5DFYE6K.js → UISlotRenderer-EEOXSJCI.js} +10 -8
  9. package/dist/avl/index.cjs +31960 -27831
  10. package/dist/avl/index.d.ts +36 -13
  11. package/dist/avl/index.js +331 -6147
  12. package/dist/{avl-3d-context-BpBKZIbc.d.ts → avl-3d-context-Dxun3-ri.d.ts} +2 -0
  13. package/dist/{chunk-I2ZNE5TD.js → chunk-6PV4LASE.js} +9495 -639
  14. package/dist/{chunk-723MJUU3.js → chunk-6ZCU3BQN.js} +1 -1
  15. package/dist/{chunk-GZGDBS4S.js → chunk-7NIU5GDC.js} +2 -2
  16. package/dist/{chunk-YYYHH5BA.js → chunk-CB64IOYD.js} +0 -4
  17. package/dist/{chunk-MZIDOJMD.js → chunk-EIIQGOZW.js} +2 -1
  18. package/dist/chunk-F7NZ3KZQ.js +434 -0
  19. package/dist/{chunk-LZRW6GXG.js → chunk-FYX64CDL.js} +0 -2
  20. package/dist/{chunk-4ZGXIW3B.js → chunk-KZRAMPM6.js} +1 -1
  21. package/dist/{chunk-VHTJRS2N.js → chunk-L3MTZ3RH.js} +7 -0
  22. package/dist/chunk-LUREMDI3.js +49 -0
  23. package/dist/{chunk-HA7CJWQX.js → chunk-MGN6B6OQ.js} +1477 -1177
  24. package/dist/{chunk-Q47ZN2DW.js → chunk-N23SVGTH.js} +83 -1
  25. package/dist/{chunk-KJGVLXEN.js → chunk-N4IJS5DD.js} +50 -116
  26. package/dist/{chunk-I5QOYW2Z.js → chunk-UTSDPJUP.js} +205 -2
  27. package/dist/{chunk-V3FGTQUE.js → chunk-ZR45FGW3.js} +7 -1
  28. package/dist/{cn-DIql5232.d.ts → cn-CDIhHCUC.d.ts} +40 -16
  29. package/dist/components/index.cjs +14455 -4099
  30. package/dist/components/index.d.ts +165 -177
  31. package/dist/components/index.js +14 -15
  32. package/dist/context/index.cjs +16 -1
  33. package/dist/context/index.js +4 -2
  34. package/dist/hooks/index.cjs +79 -6
  35. package/dist/hooks/index.d.ts +43 -2
  36. package/dist/hooks/index.js +6 -7
  37. package/dist/lib/drawable/three/index.cjs +350 -26
  38. package/dist/lib/drawable/three/index.d.ts +5 -5
  39. package/dist/lib/drawable/three/index.js +28 -7
  40. package/dist/lib/index.cjs +90 -4
  41. package/dist/lib/index.d.ts +3 -3
  42. package/dist/lib/index.js +74 -6
  43. package/dist/locales/index.cjs +0 -6
  44. package/dist/locales/index.js +2 -2
  45. package/dist/{paintDispatch-BN8Vbzgs.d.ts → paintDispatch-Cp1_S93j.d.ts} +30 -2
  46. package/dist/providers/index.cjs +13853 -1075
  47. package/dist/providers/index.d.ts +38 -6
  48. package/dist/providers/index.js +40 -30
  49. package/dist/runtime/index.cjs +28369 -18287
  50. package/dist/runtime/index.d.ts +65 -3
  51. package/dist/runtime/index.js +13 -379
  52. package/dist/ssr/index.cjs +508 -133
  53. package/dist/ssr/index.d.cts +56 -4
  54. package/dist/ssr/index.d.ts +56 -4
  55. package/dist/ssr/index.js +446 -71
  56. package/dist/{verificationRegistry-CK76GUfH.d.ts → verificationRegistry-B5aGl7WF.d.ts} +3 -2
  57. package/locales/ar.json +0 -2
  58. package/locales/en.json +0 -2
  59. package/locales/sl.json +0 -2
  60. package/package.json +7 -7
  61. package/tailwind-preset.cjs +78 -8
  62. package/themes/_contract.md +6 -0
  63. package/themes/_fonts.css +4 -4
  64. package/themes/_foundation.css +11 -0
  65. package/themes/_presets.css +2 -0
  66. package/themes/almadar-website.css +10 -0
  67. package/themes/almadar.css +10 -0
  68. package/themes/atelier.css +10 -0
  69. package/themes/bauhaus.css +10 -0
  70. package/themes/bloomberg-dense.css +10 -0
  71. package/themes/clay.css +10 -0
  72. package/themes/corporate.css +10 -0
  73. package/themes/gazette.css +10 -0
  74. package/themes/glass.css +10 -0
  75. package/themes/kflow.css +5 -0
  76. package/themes/kiosk.css +10 -0
  77. package/themes/linear-clean.css +10 -0
  78. package/themes/material.css +10 -0
  79. package/themes/minimalist.css +10 -0
  80. package/themes/nata.css +304 -0
  81. package/themes/neon.css +10 -0
  82. package/themes/notion-editorial.css +10 -0
  83. package/themes/orb.css +10 -0
  84. package/themes/prism.css +10 -0
  85. package/themes/rawi.css +304 -0
  86. package/themes/retro.css +10 -0
  87. package/themes/risograph.css +10 -0
  88. package/themes/scandi.css +10 -0
  89. package/themes/solarpunk.css +10 -0
  90. package/themes/terminal.css +138 -128
  91. package/dist/Typography-LZTP72Y4.js +0 -5
  92. package/dist/chunk-D2E44ODB.js +0 -350
  93. package/dist/chunk-HB3D3HUJ.js +0 -2265
  94. package/dist/chunk-N7JIG57B.js +0 -138
@@ -1,5 +1,5 @@
1
1
  import React__default, { ReactNode } from 'react';
2
- import { EntityRow, SExpr, EventPayload, EffectTrace, SurfaceMode } from '@almadar/core';
2
+ import { EntityRow, SExpr, EventPayload, EffectTrace, PageAccess, ViewerAuthority, SurfaceMode } from '@almadar/core';
3
3
  export { ANONYMOUS_USER, SurfaceMode, comparePathSpecificity, matchPath, matchPathAmong } from '@almadar/core';
4
4
  import { U as UIThemeDefinition } from '../ArbitraryClassCompiler-tChQ3nVq.js';
5
5
  export { A as ARBITRARY_CLASS_STYLE_ID, a as ArbitraryClassCompiler, b as ArbitraryClassCompilerProvider, c as ArbitraryClassCompilerProviderProps, d as CurrentPagePathContext, e as CurrentPagePathProvider, f as CurrentPagePathProviderProps, g as DesignThemeProvider, O as OrbitalThemeProvider, h as OrbitalThemeProviderProps, v as resetArbitraryClassStyles, u as useArbitraryClassStyles, n as useCurrentPagePath, o as useDesignTheme } from '../ArbitraryClassCompiler-tChQ3nVq.js';
@@ -10,11 +10,11 @@ export { N as NavPageDecl, a as NavStackApi, b as NavStackProvider, c as NavStac
10
10
  export { n as AwaitingSkeletonContext, A as AwaitingSkeletonSource, o as EntityBindingContext, E as EntityBindingSource, a as EntitySchemaContextValue, b as EntitySchemaProvider, c as EntitySchemaProviderProps, d as ServerBridgeContextValue, e as ServerBridgeProvider, p as ServerBridgeProviderProps, S as ServerBridgeTransport, T as TraitContext, f as TraitContextValue, g as TraitInstance, h as TraitProvider, i as TraitProviderProps, q as useAwaitingSkeleton, r as useEntityBindingSnapshot, u as useEntitySchema, j as useEntitySchemaOptional, k as useServerBridge, l as useTrait, m as useTraitContext } from '../AwaitingSkeletonContext-Bh399p1x.js';
11
11
  import { i as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-C0TWucBj.js';
12
12
  export { N as NavigationContextValue, c as NavigationProvider, d as NavigationProviderProps, e as NavigationState, k as extractRouteParams, l as findPageByName, m as findPageByPath, n as getAllPages, o as getDefaultPage, p as pathMatches, u as useActivePage, q as useInitPayload, r as useNavigateTo, s as useNavigation, t as useNavigationId, v as useNavigationState } from '../offline-executor-C0TWucBj.js';
13
- import '../verificationRegistry-CK76GUfH.js';
14
- export { G as GameAudioContext, a as GameAudioContextValue, b as GameAudioProvider, c as GameAudioProviderProps, u as useGameAudioContext, d as useGameAudioContextOptional } from '../GameAudioProvider-kXbonWTv.js';
15
- export { A as Avl3DConfig, a as Avl3DContext, b as Avl3DModelOverrides, u as useAvl3DConfig, c as useAvl3DPalette } from '../avl-3d-context-BpBKZIbc.js';
13
+ import '../verificationRegistry-B5aGl7WF.js';
14
+ export { G as GameAudioContext, a as GameAudioContextValue, b as GameAudioProvider, c as GameAudioProviderProps, u as useGameAudioContext, d as useGameAudioContextOptional } from '../GameAudioProvider-Dv_L-PHt.js';
15
+ export { A as Avl3DConfig, a as Avl3DContext, b as Avl3DModelOverrides, u as useAvl3DConfig, c as useAvl3DPalette } from '../avl-3d-context-Dxun3-ri.js';
16
16
  export { AccessTokenProvider } from '@almadar/runtime';
17
- import '../paintDispatch-BN8Vbzgs.js';
17
+ import '../paintDispatch-Cp1_S93j.js';
18
18
  import 'lucide-react';
19
19
  import 'three';
20
20
 
@@ -509,6 +509,38 @@ declare function useOfflineMode(): OfflineModeContextValue;
509
509
  */
510
510
  declare function useOptionalOfflineMode(): OfflineModeContextValue | null;
511
511
 
512
+ /**
513
+ * The page's declared `access`, enforced at the page boundary on both
514
+ * execution paths: an `access: authenticated` page's subtree (its whole trait
515
+ * circuit) mounts only once the host's auth provider has resolved an
516
+ * authenticated viewer, and is keyed by that viewer so a different user never
517
+ * inherits the previous user's circuit. Any other resolved authority sends the
518
+ * viewer to the app's declared `signIn` route. Public and undeclared pages pass
519
+ * straight through — no auth wait, no gate.
520
+ *
521
+ * @packageDocumentation
522
+ */
523
+
524
+ interface PageAccessHostProps {
525
+ /** The page's declared `access:` modifier; absent = no gate. */
526
+ access?: PageAccess;
527
+ /** What the host's auth provider has resolved the viewer to be. */
528
+ authority: ViewerAuthority;
529
+ /** The admitted viewer's identity; a change remounts the page subtree. */
530
+ viewerId?: string;
531
+ /** The app's `signIn:` route. */
532
+ signIn?: string;
533
+ /** The concrete path being opened — handed to `onDenied` as the return path. */
534
+ path: string;
535
+ /** Navigate a non-admitted viewer to `signIn`, carrying `returnTo`. */
536
+ onDenied: (signIn: string, returnTo: string) => void;
537
+ children: React__default.ReactNode;
538
+ }
539
+ declare function PageAccessHost({ access, authority, viewerId, signIn, path, onDenied, children, }: PageAccessHostProps): React__default.ReactElement | null;
540
+ declare namespace PageAccessHost {
541
+ var displayName: string;
542
+ }
543
+
512
544
  /**
513
545
  * Content surfaces: the background box behind a content block (table,
514
546
  * calendar, list, chart …). Every block paints the theme-owned `.surface-content`
@@ -534,4 +566,4 @@ declare function useContentSurface(surface?: SurfaceMode): ContentSurface;
534
566
  /** True when an ancestor already painted a surface. */
535
567
  declare function useOnSurface(): boolean;
536
568
 
537
- export { type ContentSurface, EventBusContext, EventBusProvider, type OfflineModeContextValue, OfflineModeProvider, type OfflineModeProviderProps, OrbitalProvider, type OrbitalProviderProps, RenderSlotProvider, type RenderSlotProviderProps, SelectionContext, type SelectionContextType, SelectionProvider, SurfaceBoundary, type TraitScope, TraitScopeProvider, type TraitScopeProviderProps, UIThemeDefinition, UserData, VerificationProvider, type VerificationProviderProps, mapServerEffectResults, useContentSurface, useOfflineMode, useOnSurface, useOptionalOfflineMode, useRenderSlot, useSelection, useSelectionOptional, useTraitScope, useTraitScopeChain };
569
+ export { type ContentSurface, EventBusContext, EventBusProvider, type OfflineModeContextValue, OfflineModeProvider, type OfflineModeProviderProps, OrbitalProvider, type OrbitalProviderProps, PageAccessHost, type PageAccessHostProps, RenderSlotProvider, type RenderSlotProviderProps, SelectionContext, type SelectionContextType, SelectionProvider, SurfaceBoundary, type TraitScope, TraitScopeProvider, type TraitScopeProviderProps, UIThemeDefinition, UserData, VerificationProvider, type VerificationProviderProps, mapServerEffectResults, useContentSurface, useOfflineMode, useOnSurface, useOptionalOfflineMode, useRenderSlot, useSelection, useSelectionOptional, useTraitScope, useTraitScopeChain };
@@ -1,26 +1,27 @@
1
- import { arbitraryClassesOf } from '../chunk-D2E44ODB.js';
2
- import { useGameAudio, SuspenseConfigProvider } from '../chunk-I2ZNE5TD.js';
3
- import { Box } from '../chunk-HA7CJWQX.js';
4
- import '../chunk-4ZGXIW3B.js';
5
- import '../chunk-I5QOYW2Z.js';
1
+ import { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-ZR45FGW3.js';
2
+ import { useGameAudio, arbitraryClassesOf, SuspenseConfigProvider } from '../chunk-6PV4LASE.js';
3
+ import { Box } from '../chunk-MGN6B6OQ.js';
4
+ import '../chunk-KZRAMPM6.js';
5
+ import '../chunk-UTSDPJUP.js';
6
+ import '../chunk-CB64IOYD.js';
6
7
  import '../chunk-XJTHMW4G.js';
7
8
  import { setGlobalEventBus, useEventBus } from '../chunk-CHNC4UYE.js';
8
- import '../chunk-KJGVLXEN.js';
9
- import { registerCheck, recordTransition, bindEventBus, bindTraitStateGetter } from '../chunk-Q47ZN2DW.js';
9
+ import '../chunk-N4IJS5DD.js';
10
+ import { registerCheck, recordTransition, bindEventBus, bindTraitStateGetter } from '../chunk-N23SVGTH.js';
10
11
  import { cn } from '../chunk-64WACXM7.js';
11
- import { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-V3FGTQUE.js';
12
- import '../chunk-723MJUU3.js';
13
- import '../chunk-LZRW6GXG.js';
12
+ import '../chunk-6ZCU3BQN.js';
13
+ import '../chunk-FYX64CDL.js';
14
+ import '../chunk-L3MTZ3RH.js';
14
15
  import { useOfflineExecutor } from '../chunk-PQKU62LK.js';
15
16
  import '../chunk-PEST66PN.js';
16
17
  import '../chunk-QPXIAUJD.js';
17
- import React17, { createContext, useRef, useCallback, useMemo, useEffect, useState, useContext, useSyncExternalStore } from 'react';
18
+ import React18, { createContext, useRef, useCallback, useMemo, useEffect, useState, useContext, useSyncExternalStore } from 'react';
18
19
  import { ThemeProvider, useThemeScope, useTheme, registryKeyTheme, themeHasMode, ThemeScopeContext } from '@almadar/ui/context';
19
20
  export { DesignThemeProvider, useDesignTheme } from '@almadar/ui/context';
20
21
  import { createLogger } from '@almadar/logger';
21
22
  import { jsx, Fragment } from 'react/jsx-runtime';
22
23
  import { useTranslate } from '@almadar/ui/hooks';
23
- import { ANONYMOUS_USER, isThemeRegistryKey, matchPath, matchPathAmong } from '@almadar/core';
24
+ import { ANONYMOUS_USER, isThemeRegistryKey, matchPath, matchPathAmong, defaultPage } from '@almadar/core';
24
25
  export { ANONYMOUS_USER, comparePathSpecificity, matchPath, matchPathAmong } from '@almadar/core';
25
26
  import { createHttpTransport } from '@almadar/runtime';
26
27
  import { useLocation, useNavigate } from 'react-router-dom';
@@ -737,17 +738,7 @@ function findPageByName(schema, pageName) {
737
738
  return null;
738
739
  }
739
740
  function getDefaultPage(schema) {
740
- if (!schema.orbitals) return null;
741
- for (const orbital of schema.orbitals) {
742
- if (!isInlineOrbital(orbital)) continue;
743
- if (!orbital.pages) continue;
744
- for (const pageRef of orbital.pages) {
745
- if (isInlinePage(pageRef)) {
746
- return { page: pageRef, orbitalName: orbital.name };
747
- }
748
- }
749
- }
750
- return null;
741
+ return defaultPage(schema);
751
742
  }
752
743
  function getAllPages(schema) {
753
744
  const pages = [];
@@ -782,9 +773,9 @@ function NavigationProvider({
782
773
  }
783
774
  }
784
775
  if (!page) {
785
- const defaultPage = getDefaultPage(schema);
786
- if (defaultPage) {
787
- page = defaultPage.page;
776
+ const defaultPage2 = getDefaultPage(schema);
777
+ if (defaultPage2) {
778
+ page = defaultPage2.page;
788
779
  path = page.path || "/";
789
780
  }
790
781
  }
@@ -1158,6 +1149,25 @@ function GameAudioProvider({
1158
1149
  return /* @__PURE__ */ jsx(GameAudioContext.Provider, { value, children });
1159
1150
  }
1160
1151
  GameAudioProvider.displayName = "GameAudioProvider";
1152
+ function PageAccessHost({
1153
+ access,
1154
+ authority,
1155
+ viewerId,
1156
+ signIn,
1157
+ path,
1158
+ onDenied,
1159
+ children
1160
+ }) {
1161
+ const gated = access === "authenticated";
1162
+ const denied = gated && authority !== "pending" && authority !== "authenticated";
1163
+ useEffect(() => {
1164
+ if (denied && signIn !== void 0) onDenied(signIn, path);
1165
+ }, [denied, signIn, path, onDenied]);
1166
+ if (!gated) return /* @__PURE__ */ jsx(Fragment, { children });
1167
+ if (authority !== "authenticated") return null;
1168
+ return /* @__PURE__ */ jsx(React18.Fragment, { children }, viewerId);
1169
+ }
1170
+ PageAccessHost.displayName = "PageAccessHost";
1161
1171
  function pageEntryLabel(page, navLabels) {
1162
1172
  return page.label ?? navLabels?.[page.path] ?? page.name;
1163
1173
  }
@@ -1450,12 +1460,12 @@ function useAvl3DConfig() {
1450
1460
  function useAvl3DPalette() {
1451
1461
  return useContext(Avl3DContext).palette;
1452
1462
  }
1453
- var SurfaceContext = React17.createContext(false);
1463
+ var SurfaceContext = React18.createContext(false);
1454
1464
  function SurfaceBoundary({ children }) {
1455
1465
  return /* @__PURE__ */ jsx(SurfaceContext.Provider, { value: true, children });
1456
1466
  }
1457
1467
  function useContentSurface(surface = "auto") {
1458
- const onSurface = React17.useContext(SurfaceContext);
1468
+ const onSurface = React18.useContext(SurfaceContext);
1459
1469
  const paints = surface === "auto" && !onSurface;
1460
1470
  return {
1461
1471
  className: paints ? "surface-content" : void 0,
@@ -1463,7 +1473,7 @@ function useContentSurface(surface = "auto") {
1463
1473
  };
1464
1474
  }
1465
1475
  function useOnSurface() {
1466
- return React17.useContext(SurfaceContext);
1476
+ return React18.useContext(SurfaceContext);
1467
1477
  }
1468
1478
 
1469
- export { ARBITRARY_CLASS_STYLE_ID, ArbitraryClassCompilerProvider, Avl3DContext, AwaitingSkeletonContext, CurrentPagePathContext, CurrentPagePathProvider, EntityBindingContext, EntitySchemaProvider, EventBusContext, EventBusProvider, GameAudioContext, GameAudioProvider, NavStackProvider, NavStackRouterBridge, NavigationProvider, OfflineModeProvider, OrbitalProvider, OrbitalThemeProvider, RenderSlotProvider, SelectionContext, SelectionProvider, ServerBridgeProvider, SurfaceBoundary, TraitContext, TraitProvider, TraitScopeProvider, UserContext, UserProvider, VerificationProvider, extractRouteParams, findPageByName, findPageByPath, getAllPages, getDefaultPage, isInertNavStack, mapServerEffectResults, pathMatches, resetArbitraryClassStyles, useActivePage, useArbitraryClassStyles, useAvl3DConfig, useAvl3DPalette, useAwaitingSkeleton, useContentSurface, useCurrentPagePath, useEntityBindingSnapshot, useEntitySchema, useEntitySchemaOptional, useGameAudioContext, useGameAudioContextOptional, useHasPermission, useHasRole, useInitPayload, useNavStack, useNavigateTo, useNavigation, useNavigationId, useNavigationState, useOfflineMode, useOnSurface, useOptionalOfflineMode, useRenderSlot, useSelection, useSelectionOptional, useServerBridge, useTrait, useTraitContext, useTraitScope, useTraitScopeChain, useUser, useUserForEvaluation };
1479
+ export { ARBITRARY_CLASS_STYLE_ID, ArbitraryClassCompilerProvider, Avl3DContext, AwaitingSkeletonContext, CurrentPagePathContext, CurrentPagePathProvider, EntityBindingContext, EntitySchemaProvider, EventBusContext, EventBusProvider, GameAudioContext, GameAudioProvider, NavStackProvider, NavStackRouterBridge, NavigationProvider, OfflineModeProvider, OrbitalProvider, OrbitalThemeProvider, PageAccessHost, RenderSlotProvider, SelectionContext, SelectionProvider, ServerBridgeProvider, SurfaceBoundary, TraitContext, TraitProvider, TraitScopeProvider, UserContext, UserProvider, VerificationProvider, extractRouteParams, findPageByName, findPageByPath, getAllPages, getDefaultPage, isInertNavStack, mapServerEffectResults, pathMatches, resetArbitraryClassStyles, useActivePage, useArbitraryClassStyles, useAvl3DConfig, useAvl3DPalette, useAwaitingSkeleton, useContentSurface, useCurrentPagePath, useEntityBindingSnapshot, useEntitySchema, useEntitySchemaOptional, useGameAudioContext, useGameAudioContextOptional, useHasPermission, useHasRole, useInitPayload, useNavStack, useNavigateTo, useNavigation, useNavigationId, useNavigationState, useOfflineMode, useOnSurface, useOptionalOfflineMode, useRenderSlot, useSelection, useSelectionOptional, useServerBridge, useTrait, useTraitContext, useTraitScope, useTraitScopeChain, useUser, useUserForEvaluation };