@almadar/ui 2.28.2 → 2.29.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.
@@ -11,6 +11,8 @@ export { SelectionProvider, SelectionContext, useSelection, useSelectionOptional
11
11
  export type { SelectionContextType } from './SelectionProvider';
12
12
  export { FetchedDataProvider, FetchedDataContext, useFetchedDataContext, useFetchedData, useFetchedEntity, } from './FetchedDataProvider';
13
13
  export type { FetchedDataProviderProps, FetchedDataContextValue, FetchedDataState, EntityRecord, } from './FetchedDataProvider';
14
+ export { EntityStoreProvider, EntityStoreContext, useEntityRef, useEntityWatch, useEntityStore, } from './EntityStoreProvider';
15
+ export type { EntityStoreContextValue } from './EntityStoreProvider';
14
16
  export { VerificationProvider } from './VerificationProvider';
15
17
  export type { VerificationProviderProps } from './VerificationProvider';
16
18
  export { OfflineModeProvider, useOfflineMode, useOptionalOfflineMode, } from './OfflineModeProvider';
@@ -1,5 +1,5 @@
1
- import * as React113 from 'react';
2
- import React113__default, { createContext, useCallback, useState, useRef, useEffect, useLayoutEffect, lazy, useContext, useMemo } from 'react';
1
+ import * as React114 from 'react';
2
+ import React114__default, { createContext, useCallback, useState, useRef, useEffect, useLayoutEffect, lazy, useContext, useSyncExternalStore, useMemo } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { EventBusContext } from '@almadar/ui/providers';
5
5
  import 'react-dom';
@@ -255,6 +255,81 @@ var ThemeProvider = ({
255
255
  );
256
256
  return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: contextValue, children });
257
257
  };
258
+ var store = /* @__PURE__ */ new Map();
259
+ var storeListeners = /* @__PURE__ */ new Set();
260
+ var watchCallbacks = /* @__PURE__ */ new Map();
261
+ function advance(entityType, data) {
262
+ const prev = store.get(entityType);
263
+ const oldData = prev?.data ?? [];
264
+ store.set(entityType, { data, version: (prev?.version ?? 0) + 1 });
265
+ for (const listener of storeListeners) {
266
+ listener();
267
+ }
268
+ const cbs = watchCallbacks.get(entityType);
269
+ if (cbs) {
270
+ for (const cb of cbs) {
271
+ try {
272
+ cb(oldData, data);
273
+ } catch {
274
+ }
275
+ }
276
+ }
277
+ }
278
+ function getSnapshot(entityType) {
279
+ return store.get(entityType)?.data ?? [];
280
+ }
281
+ function getVersion(entityType) {
282
+ return store.get(entityType)?.version ?? 0;
283
+ }
284
+ function subscribeToStore(listener) {
285
+ storeListeners.add(listener);
286
+ return () => {
287
+ storeListeners.delete(listener);
288
+ };
289
+ }
290
+ function addWatch(entityType, callback) {
291
+ let cbs = watchCallbacks.get(entityType);
292
+ if (!cbs) {
293
+ cbs = /* @__PURE__ */ new Set();
294
+ watchCallbacks.set(entityType, cbs);
295
+ }
296
+ cbs.add(callback);
297
+ return () => {
298
+ cbs.delete(callback);
299
+ };
300
+ }
301
+ function useEntityRef(entityType) {
302
+ const versionRef = useRef(0);
303
+ const dataRef = useRef([]);
304
+ const getSnapshotStable = React114__default.useCallback(() => {
305
+ const currentVersion = getVersion(entityType);
306
+ if (currentVersion !== versionRef.current) {
307
+ versionRef.current = currentVersion;
308
+ dataRef.current = getSnapshot(entityType);
309
+ }
310
+ return dataRef.current;
311
+ }, [entityType]);
312
+ return useSyncExternalStore(subscribeToStore, getSnapshotStable, () => []);
313
+ }
314
+ function useEntityWatch(entityType, callback) {
315
+ const callbackRef = useRef(callback);
316
+ callbackRef.current = callback;
317
+ useEffect(() => {
318
+ return addWatch(entityType, (oldData, newData) => {
319
+ callbackRef.current(oldData, newData);
320
+ });
321
+ }, [entityType]);
322
+ }
323
+ var EntityStoreContext = createContext({
324
+ advance,
325
+ getSnapshot
326
+ });
327
+ function useEntityStore() {
328
+ return useContext(EntityStoreContext);
329
+ }
330
+ function EntityStoreProvider({ children }) {
331
+ return /* @__PURE__ */ jsx(EntityStoreContext.Provider, { value: { advance, getSnapshot }, children });
332
+ }
258
333
  function setGlobalEventBus(bus) {
259
334
  if (typeof window !== "undefined") {
260
335
  window.__kflowEventBus = bus;
@@ -675,7 +750,7 @@ var positionStyles = {
675
750
  fixed: "fixed",
676
751
  sticky: "sticky"
677
752
  };
678
- var Box = React113__default.forwardRef(
753
+ var Box = React114__default.forwardRef(
679
754
  ({
680
755
  padding,
681
756
  paddingX,
@@ -946,7 +1021,7 @@ function resolveIconProp(value, sizeClass) {
946
1021
  const IconComp = value;
947
1022
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
948
1023
  }
949
- if (React113__default.isValidElement(value)) {
1024
+ if (React114__default.isValidElement(value)) {
950
1025
  return value;
951
1026
  }
952
1027
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -955,7 +1030,7 @@ function resolveIconProp(value, sizeClass) {
955
1030
  }
956
1031
  return value;
957
1032
  }
958
- var Button = React113__default.forwardRef(
1033
+ var Button = React114__default.forwardRef(
959
1034
  ({
960
1035
  className,
961
1036
  variant = "primary",
@@ -1051,7 +1126,7 @@ var sizeStyles3 = {
1051
1126
  md: "px-2.5 py-1 text-sm",
1052
1127
  lg: "px-3 py-1.5 text-base"
1053
1128
  };
1054
- var Badge = React113__default.forwardRef(
1129
+ var Badge = React114__default.forwardRef(
1055
1130
  ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1056
1131
  const iconSizes2 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1057
1132
  const resolvedIcon = typeof icon === "string" ? (() => {
@@ -1078,7 +1153,7 @@ var Badge = React113__default.forwardRef(
1078
1153
  }
1079
1154
  );
1080
1155
  Badge.displayName = "Badge";
1081
- var Input = React113__default.forwardRef(
1156
+ var Input = React114__default.forwardRef(
1082
1157
  ({
1083
1158
  className,
1084
1159
  inputType,
@@ -1190,7 +1265,7 @@ var Input = React113__default.forwardRef(
1190
1265
  }
1191
1266
  );
1192
1267
  Input.displayName = "Input";
1193
- var Label = React113__default.forwardRef(
1268
+ var Label = React114__default.forwardRef(
1194
1269
  ({ className, required, children, ...props }, ref) => {
1195
1270
  return /* @__PURE__ */ jsxs(
1196
1271
  "label",
@@ -1210,7 +1285,7 @@ var Label = React113__default.forwardRef(
1210
1285
  }
1211
1286
  );
1212
1287
  Label.displayName = "Label";
1213
- var Textarea = React113__default.forwardRef(
1288
+ var Textarea = React114__default.forwardRef(
1214
1289
  ({ className, error, ...props }, ref) => {
1215
1290
  return /* @__PURE__ */ jsx(
1216
1291
  "textarea",
@@ -1233,7 +1308,7 @@ var Textarea = React113__default.forwardRef(
1233
1308
  }
1234
1309
  );
1235
1310
  Textarea.displayName = "Textarea";
1236
- var Select = React113__default.forwardRef(
1311
+ var Select = React114__default.forwardRef(
1237
1312
  ({ className, options, placeholder, error, ...props }, ref) => {
1238
1313
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1239
1314
  /* @__PURE__ */ jsxs(
@@ -1269,7 +1344,7 @@ var Select = React113__default.forwardRef(
1269
1344
  }
1270
1345
  );
1271
1346
  Select.displayName = "Select";
1272
- var Checkbox = React113__default.forwardRef(
1347
+ var Checkbox = React114__default.forwardRef(
1273
1348
  ({ className, label, id, ...props }, ref) => {
1274
1349
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
1275
1350
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -1345,7 +1420,7 @@ var shadowStyles2 = {
1345
1420
  md: "shadow",
1346
1421
  lg: "shadow-lg"
1347
1422
  };
1348
- var Card = React113__default.forwardRef(
1423
+ var Card = React114__default.forwardRef(
1349
1424
  ({
1350
1425
  className,
1351
1426
  variant = "bordered",
@@ -1381,9 +1456,9 @@ var Card = React113__default.forwardRef(
1381
1456
  }
1382
1457
  );
1383
1458
  Card.displayName = "Card";
1384
- var CardHeader = React113__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
1459
+ var CardHeader = React114__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
1385
1460
  CardHeader.displayName = "CardHeader";
1386
- var CardTitle = React113__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1461
+ var CardTitle = React114__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1387
1462
  "h3",
1388
1463
  {
1389
1464
  ref,
@@ -1396,11 +1471,11 @@ var CardTitle = React113__default.forwardRef(({ className, ...props }, ref) => /
1396
1471
  }
1397
1472
  ));
1398
1473
  CardTitle.displayName = "CardTitle";
1399
- var CardContent = React113__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
1474
+ var CardContent = React114__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
1400
1475
  CardContent.displayName = "CardContent";
1401
1476
  var CardBody = CardContent;
1402
1477
  CardBody.displayName = "CardBody";
1403
- var CardFooter = React113__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1478
+ var CardFooter = React114__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1404
1479
  "div",
1405
1480
  {
1406
1481
  ref,
@@ -1415,7 +1490,7 @@ var sizeStyles4 = {
1415
1490
  md: "h-6 w-6",
1416
1491
  lg: "h-8 w-8"
1417
1492
  };
1418
- var Spinner = React113__default.forwardRef(
1493
+ var Spinner = React114__default.forwardRef(
1419
1494
  ({ className, size = "md", ...props }, ref) => {
1420
1495
  return /* @__PURE__ */ jsx(
1421
1496
  "div",
@@ -1429,7 +1504,7 @@ var Spinner = React113__default.forwardRef(
1429
1504
  }
1430
1505
  );
1431
1506
  Spinner.displayName = "Spinner";
1432
- var Radio = React113__default.forwardRef(
1507
+ var Radio = React114__default.forwardRef(
1433
1508
  ({
1434
1509
  label,
1435
1510
  helperText,
@@ -1533,7 +1608,7 @@ var Radio = React113__default.forwardRef(
1533
1608
  }
1534
1609
  );
1535
1610
  Radio.displayName = "Radio";
1536
- var Switch = React113.forwardRef(
1611
+ var Switch = React114.forwardRef(
1537
1612
  ({
1538
1613
  checked,
1539
1614
  defaultChecked = false,
@@ -1544,10 +1619,10 @@ var Switch = React113.forwardRef(
1544
1619
  name,
1545
1620
  className
1546
1621
  }, ref) => {
1547
- const [isChecked, setIsChecked] = React113.useState(
1622
+ const [isChecked, setIsChecked] = React114.useState(
1548
1623
  checked !== void 0 ? checked : defaultChecked
1549
1624
  );
1550
- React113.useEffect(() => {
1625
+ React114.useEffect(() => {
1551
1626
  if (checked !== void 0) {
1552
1627
  setIsChecked(checked);
1553
1628
  }
@@ -1705,7 +1780,7 @@ var sizeStyles5 = {
1705
1780
  md: "w-2.5 h-2.5",
1706
1781
  lg: "w-3 h-3"
1707
1782
  };
1708
- var StatusDot = React113__default.forwardRef(
1783
+ var StatusDot = React114__default.forwardRef(
1709
1784
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
1710
1785
  return /* @__PURE__ */ jsx(
1711
1786
  "span",
@@ -1752,7 +1827,7 @@ var iconMap2 = {
1752
1827
  down: TrendingDown,
1753
1828
  flat: ArrowRight
1754
1829
  };
1755
- var TrendIndicator = React113__default.forwardRef(
1830
+ var TrendIndicator = React114__default.forwardRef(
1756
1831
  ({
1757
1832
  className,
1758
1833
  value,
@@ -1811,7 +1886,7 @@ var thumbSizes = {
1811
1886
  md: "w-4 h-4",
1812
1887
  lg: "w-5 h-5"
1813
1888
  };
1814
- var RangeSlider = React113__default.forwardRef(
1889
+ var RangeSlider = React114__default.forwardRef(
1815
1890
  ({
1816
1891
  className,
1817
1892
  min = 0,
@@ -2014,7 +2089,7 @@ var paddingClasses = {
2014
2089
  md: "py-16",
2015
2090
  lg: "py-24"
2016
2091
  };
2017
- var ContentSection = React113__default.forwardRef(
2092
+ var ContentSection = React114__default.forwardRef(
2018
2093
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
2019
2094
  return /* @__PURE__ */ jsx(
2020
2095
  Box,
@@ -2053,7 +2128,7 @@ var animatedStyles = {
2053
2128
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
2054
2129
  "none": {}
2055
2130
  };
2056
- var AnimatedReveal = React113__default.forwardRef(
2131
+ var AnimatedReveal = React114__default.forwardRef(
2057
2132
  ({
2058
2133
  trigger = "scroll",
2059
2134
  animation = "fade-up",
@@ -2206,7 +2281,7 @@ function applyMorphAnimation(container, animate, duration, delay, easing) {
2206
2281
  el.style.opacity = animate ? "1" : "0";
2207
2282
  });
2208
2283
  }
2209
- var AnimatedGraphic = React113__default.forwardRef(
2284
+ var AnimatedGraphic = React114__default.forwardRef(
2210
2285
  ({
2211
2286
  src,
2212
2287
  svgContent,
@@ -2229,7 +2304,7 @@ var AnimatedGraphic = React113__default.forwardRef(
2229
2304
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
2230
2305
  const resolvedSvg = svgContent ?? fetchedSvg;
2231
2306
  const prevAnimateRef = useRef(animate);
2232
- const setRef = React113__default.useCallback(
2307
+ const setRef = React114__default.useCallback(
2233
2308
  (node) => {
2234
2309
  containerRef.current = node;
2235
2310
  if (typeof ref === "function") ref(node);
@@ -2471,7 +2546,7 @@ var ErrorState = ({
2471
2546
  );
2472
2547
  };
2473
2548
  ErrorState.displayName = "ErrorState";
2474
- var ErrorBoundary = class extends React113__default.Component {
2549
+ var ErrorBoundary = class extends React114__default.Component {
2475
2550
  constructor(props) {
2476
2551
  super(props);
2477
2552
  __publicField(this, "reset", () => {
@@ -2984,7 +3059,7 @@ function getSummary() {
2984
3059
  pending: allChecks.filter((c) => c.status === "pending").length
2985
3060
  };
2986
3061
  }
2987
- function getSnapshot() {
3062
+ function getSnapshot2() {
2988
3063
  return {
2989
3064
  checks: getAllChecks(),
2990
3065
  transitions: getTransitions(),
@@ -3000,7 +3075,7 @@ function exposeOnWindow() {
3000
3075
  if (typeof window === "undefined") return;
3001
3076
  if (!window.__orbitalVerification) {
3002
3077
  window.__orbitalVerification = {
3003
- getSnapshot,
3078
+ getSnapshot: getSnapshot2,
3004
3079
  getChecks: getAllChecks,
3005
3080
  getTransitions,
3006
3081
  getBridge: getBridgeHealth,
@@ -3064,7 +3139,7 @@ function bindTraitStateGetter(getter) {
3064
3139
  }
3065
3140
  }
3066
3141
  exposeOnWindow();
3067
- var MarkdownContent = React113__default.memo(
3142
+ var MarkdownContent = React114__default.memo(
3068
3143
  ({ content, direction, className }) => {
3069
3144
  const { t: _t } = useTranslate();
3070
3145
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -3166,7 +3241,7 @@ var MarkdownContent = React113__default.memo(
3166
3241
  (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
3167
3242
  );
3168
3243
  MarkdownContent.displayName = "MarkdownContent";
3169
- var CodeBlock = React113__default.memo(
3244
+ var CodeBlock = React114__default.memo(
3170
3245
  ({
3171
3246
  code: rawCode,
3172
3247
  language = "text",
@@ -3283,12 +3358,12 @@ GameAudioContext.displayName = "GameAudioContext";
3283
3358
 
3284
3359
  // components/organisms/component-registry.generated.ts
3285
3360
  function lazyThree(name, loader) {
3286
- const Lazy = React113__default.lazy(() => loader().then((m) => ({ default: m[name] })));
3361
+ const Lazy = React114__default.lazy(() => loader().then((m) => ({ default: m[name] })));
3287
3362
  function ThreeWrapper(props) {
3288
- return React113__default.createElement(
3289
- React113__default.Suspense,
3363
+ return React114__default.createElement(
3364
+ React114__default.Suspense,
3290
3365
  { fallback: null },
3291
- React113__default.createElement(Lazy, props)
3366
+ React114__default.createElement(Lazy, props)
3292
3367
  );
3293
3368
  }
3294
3369
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -3315,7 +3390,7 @@ function SuspenseConfigProvider({
3315
3390
  config,
3316
3391
  children
3317
3392
  }) {
3318
- return React113__default.createElement(
3393
+ return React114__default.createElement(
3319
3394
  SuspenseConfigContext.Provider,
3320
3395
  { value: config },
3321
3396
  children
@@ -3511,7 +3586,7 @@ function OrbitalProvider({
3511
3586
  () => ({ enabled: suspense }),
3512
3587
  [suspense]
3513
3588
  );
3514
- const inner = /* @__PURE__ */ jsx(EventBusProvider, { debug: debug2, children: /* @__PURE__ */ jsx(VerificationProvider, { enabled: verification, children: /* @__PURE__ */ jsx(SelectionProvider, { debug: debug2, children: /* @__PURE__ */ jsx(SuspenseConfigProvider, { config: suspenseConfig, children }) }) }) });
3589
+ const inner = /* @__PURE__ */ jsx(EntityStoreProvider, { children: /* @__PURE__ */ jsx(EventBusProvider, { debug: debug2, children: /* @__PURE__ */ jsx(VerificationProvider, { enabled: verification, children: /* @__PURE__ */ jsx(SelectionProvider, { debug: debug2, children: /* @__PURE__ */ jsx(SuspenseConfigProvider, { config: suspenseConfig, children }) }) }) }) });
3515
3590
  if (skipTheme) {
3516
3591
  return inner;
3517
3592
  }
@@ -3712,4 +3787,4 @@ function useOptionalOfflineMode() {
3712
3787
  return useContext(OfflineModeContext);
3713
3788
  }
3714
3789
 
3715
- export { EventBusContext2 as EventBusContext, EventBusProvider, FetchedDataContext, FetchedDataProvider, OfflineModeProvider, OrbitalProvider, SelectionContext, SelectionProvider, VerificationProvider, useFetchedData, useFetchedDataContext, useFetchedEntity, useOfflineMode, useOptionalOfflineMode, useSelection, useSelectionOptional };
3790
+ export { EntityStoreContext, EntityStoreProvider, EventBusContext2 as EventBusContext, EventBusProvider, FetchedDataContext, FetchedDataProvider, OfflineModeProvider, OrbitalProvider, SelectionContext, SelectionProvider, VerificationProvider, useEntityRef, useEntityStore, useEntityWatch, useFetchedData, useFetchedDataContext, useFetchedEntity, useOfflineMode, useOptionalOfflineMode, useSelection, useSelectionOptional };
@@ -13,8 +13,8 @@
13
13
  */
14
14
  import React from 'react';
15
15
  export interface OrbPreviewProps {
16
- /** The orbital schema. Accepts a JSON string or a parsed object. */
17
- schema: string | Record<string, unknown>;
16
+ /** The orbital schema. Accepts a JSON string or an OrbitalSchema object. */
17
+ schema: string | import('@almadar/core').OrbitalSchema;
18
18
  /** Mock entity data keyed by entity name. */
19
19
  mockData?: Record<string, unknown[]>;
20
20
  /** Preview container height. Default: '400px'. */