@almadar/ui 6.16.0 → 6.17.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.
- package/dist/avl/index.cjs +45 -3
- package/dist/avl/index.js +45 -3
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.ts +2 -2
- package/dist/runtime/index.cjs +45 -3
- package/dist/runtime/index.d.cts +10 -2
- package/dist/runtime/index.d.ts +10 -2
- package/dist/runtime/index.js +45 -3
- package/package.json +2 -2
package/dist/avl/index.cjs
CHANGED
|
@@ -60617,6 +60617,30 @@ function TraitInitializer({ traits: traits2, routeParams, orbitalNames, onNaviga
|
|
|
60617
60617
|
}, [bridge.connected, orbitalNames, bridge.sendEvent, uiSlots, onNavigate, onNavigateBack, embeddedTraits, activeTraitNames, withActiveTraits, routeParams]);
|
|
60618
60618
|
return /* @__PURE__ */ jsxRuntime.jsx(providers.EntityBindingContext.Provider, { value: entityBindingSource, children });
|
|
60619
60619
|
}
|
|
60620
|
+
function FitToBox({ children }) {
|
|
60621
|
+
const outerRef = React96.useRef(null);
|
|
60622
|
+
const innerRef = React96.useRef(null);
|
|
60623
|
+
const [scale, setScale] = React96.useState(1);
|
|
60624
|
+
React96.useEffect(() => {
|
|
60625
|
+
const outer = outerRef.current;
|
|
60626
|
+
const inner = innerRef.current;
|
|
60627
|
+
if (!outer || !inner) return;
|
|
60628
|
+
const update = () => {
|
|
60629
|
+
const sw = inner.scrollWidth;
|
|
60630
|
+
const sh = inner.scrollHeight;
|
|
60631
|
+
const cw = outer.clientWidth;
|
|
60632
|
+
const ch = outer.clientHeight;
|
|
60633
|
+
if (!sw || !sh || !cw || !ch) return;
|
|
60634
|
+
setScale(Math.min(1, cw / sw, ch / sh));
|
|
60635
|
+
};
|
|
60636
|
+
update();
|
|
60637
|
+
const ro = new ResizeObserver(update);
|
|
60638
|
+
ro.observe(outer);
|
|
60639
|
+
ro.observe(inner);
|
|
60640
|
+
return () => ro.disconnect();
|
|
60641
|
+
}, []);
|
|
60642
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: outerRef, className: "relative h-full w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: innerRef, style: { transform: `scale(${scale})`, transformOrigin: "top left", width: "fit-content" }, children }) });
|
|
60643
|
+
}
|
|
60620
60644
|
function SchemaRunner({ schema, serverUrl, transport, getAccessToken, mockData, pageName, routeParams, onNavigate, onNavigateBack, onLocalFallback, persistence }) {
|
|
60621
60645
|
const { traits: traits2, allEntities, allTraits, ir } = useResolvedSchema(schema, pageName);
|
|
60622
60646
|
const allPageTraits = React96.useMemo(() => {
|
|
@@ -60802,6 +60826,7 @@ function OrbPreview({
|
|
|
60802
60826
|
getAccessToken,
|
|
60803
60827
|
initialPagePath,
|
|
60804
60828
|
isolated = false,
|
|
60829
|
+
fit = false,
|
|
60805
60830
|
user = null
|
|
60806
60831
|
}) {
|
|
60807
60832
|
if (serverUrl && transport) {
|
|
@@ -60958,7 +60983,7 @@ function OrbPreview({
|
|
|
60958
60983
|
Box,
|
|
60959
60984
|
{
|
|
60960
60985
|
ref: containerRef,
|
|
60961
|
-
className:
|
|
60986
|
+
className: `${fit ? "overflow-hidden" : "overflow-auto"} border border-[var(--color-border)] rounded-[var(--radius-md)] ${className ?? ""}`,
|
|
60962
60987
|
style: { height },
|
|
60963
60988
|
children: [
|
|
60964
60989
|
localFallback && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "px-3 py-2 bg-[var(--color-warning)] bg-opacity-10 border-b border-[var(--color-warning)] flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-[var(--color-warning-foreground)] flex-1", children: "Preview server unreachable \u2014 running locally. Server-side state and persistence are disabled." }) }),
|
|
@@ -60971,7 +60996,22 @@ function OrbPreview({
|
|
|
60971
60996
|
storageKey: `almadar:navstack:${parseResult.schema.name ?? "preview"}`,
|
|
60972
60997
|
children: [
|
|
60973
60998
|
/* @__PURE__ */ jsxRuntime.jsx(NavStackRefBridge, { apiRef: navStackRef }),
|
|
60974
|
-
/* @__PURE__ */ jsxRuntime.jsx(providers.OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsxRuntime.jsx(context.UISlotProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
60999
|
+
/* @__PURE__ */ jsxRuntime.jsx(providers.OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsxRuntime.jsx(context.UISlotProvider, { children: fit ? /* @__PURE__ */ jsxRuntime.jsx(FitToBox, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
61000
|
+
SchemaRunner,
|
|
61001
|
+
{
|
|
61002
|
+
schema: parseResult.schema,
|
|
61003
|
+
serverUrl,
|
|
61004
|
+
transport,
|
|
61005
|
+
getAccessToken,
|
|
61006
|
+
mockData: effectiveMockData,
|
|
61007
|
+
pageName: currentPage,
|
|
61008
|
+
routeParams,
|
|
61009
|
+
onNavigate: handleNavigateEffect,
|
|
61010
|
+
onNavigateBack: handleNavigateBack,
|
|
61011
|
+
onLocalFallback: handleLocalFallback,
|
|
61012
|
+
persistence
|
|
61013
|
+
}
|
|
61014
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
60975
61015
|
SchemaRunner,
|
|
60976
61016
|
{
|
|
60977
61017
|
schema: parseResult.schema,
|
|
@@ -61002,7 +61042,8 @@ function BrowserPlayground({
|
|
|
61002
61042
|
initialPagePath,
|
|
61003
61043
|
height,
|
|
61004
61044
|
className,
|
|
61005
|
-
paused
|
|
61045
|
+
paused,
|
|
61046
|
+
fit
|
|
61006
61047
|
}) {
|
|
61007
61048
|
const [runtime] = React96.useState(
|
|
61008
61049
|
() => new OrbitalServerRuntime.OrbitalServerRuntime({ mode, debug: false })
|
|
@@ -61064,6 +61105,7 @@ function BrowserPlayground({
|
|
|
61064
61105
|
initialPagePath,
|
|
61065
61106
|
height,
|
|
61066
61107
|
className,
|
|
61108
|
+
fit,
|
|
61067
61109
|
isolated: true
|
|
61068
61110
|
}
|
|
61069
61111
|
);
|
package/dist/avl/index.js
CHANGED
|
@@ -60541,6 +60541,30 @@ function TraitInitializer({ traits: traits2, routeParams, orbitalNames, onNaviga
|
|
|
60541
60541
|
}, [bridge.connected, orbitalNames, bridge.sendEvent, uiSlots, onNavigate, onNavigateBack, embeddedTraits, activeTraitNames, withActiveTraits, routeParams]);
|
|
60542
60542
|
return /* @__PURE__ */ jsx(EntityBindingContext.Provider, { value: entityBindingSource, children });
|
|
60543
60543
|
}
|
|
60544
|
+
function FitToBox({ children }) {
|
|
60545
|
+
const outerRef = useRef(null);
|
|
60546
|
+
const innerRef = useRef(null);
|
|
60547
|
+
const [scale, setScale] = useState(1);
|
|
60548
|
+
useEffect(() => {
|
|
60549
|
+
const outer = outerRef.current;
|
|
60550
|
+
const inner = innerRef.current;
|
|
60551
|
+
if (!outer || !inner) return;
|
|
60552
|
+
const update = () => {
|
|
60553
|
+
const sw = inner.scrollWidth;
|
|
60554
|
+
const sh = inner.scrollHeight;
|
|
60555
|
+
const cw = outer.clientWidth;
|
|
60556
|
+
const ch = outer.clientHeight;
|
|
60557
|
+
if (!sw || !sh || !cw || !ch) return;
|
|
60558
|
+
setScale(Math.min(1, cw / sw, ch / sh));
|
|
60559
|
+
};
|
|
60560
|
+
update();
|
|
60561
|
+
const ro = new ResizeObserver(update);
|
|
60562
|
+
ro.observe(outer);
|
|
60563
|
+
ro.observe(inner);
|
|
60564
|
+
return () => ro.disconnect();
|
|
60565
|
+
}, []);
|
|
60566
|
+
return /* @__PURE__ */ jsx("div", { ref: outerRef, className: "relative h-full w-full overflow-hidden", children: /* @__PURE__ */ jsx("div", { ref: innerRef, style: { transform: `scale(${scale})`, transformOrigin: "top left", width: "fit-content" }, children }) });
|
|
60567
|
+
}
|
|
60544
60568
|
function SchemaRunner({ schema, serverUrl, transport, getAccessToken, mockData, pageName, routeParams, onNavigate, onNavigateBack, onLocalFallback, persistence }) {
|
|
60545
60569
|
const { traits: traits2, allEntities, allTraits, ir } = useResolvedSchema(schema, pageName);
|
|
60546
60570
|
const allPageTraits = useMemo(() => {
|
|
@@ -60726,6 +60750,7 @@ function OrbPreview({
|
|
|
60726
60750
|
getAccessToken,
|
|
60727
60751
|
initialPagePath,
|
|
60728
60752
|
isolated = false,
|
|
60753
|
+
fit = false,
|
|
60729
60754
|
user = null
|
|
60730
60755
|
}) {
|
|
60731
60756
|
if (serverUrl && transport) {
|
|
@@ -60882,7 +60907,7 @@ function OrbPreview({
|
|
|
60882
60907
|
Box,
|
|
60883
60908
|
{
|
|
60884
60909
|
ref: containerRef,
|
|
60885
|
-
className:
|
|
60910
|
+
className: `${fit ? "overflow-hidden" : "overflow-auto"} border border-[var(--color-border)] rounded-[var(--radius-md)] ${className ?? ""}`,
|
|
60886
60911
|
style: { height },
|
|
60887
60912
|
children: [
|
|
60888
60913
|
localFallback && /* @__PURE__ */ jsx(Box, { className: "px-3 py-2 bg-[var(--color-warning)] bg-opacity-10 border-b border-[var(--color-warning)] flex items-center gap-2", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-[var(--color-warning-foreground)] flex-1", children: "Preview server unreachable \u2014 running locally. Server-side state and persistence are disabled." }) }),
|
|
@@ -60895,7 +60920,22 @@ function OrbPreview({
|
|
|
60895
60920
|
storageKey: `almadar:navstack:${parseResult.schema.name ?? "preview"}`,
|
|
60896
60921
|
children: [
|
|
60897
60922
|
/* @__PURE__ */ jsx(NavStackRefBridge, { apiRef: navStackRef }),
|
|
60898
|
-
/* @__PURE__ */ jsx(OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsx(UISlotProvider, { children: /* @__PURE__ */ jsx(
|
|
60923
|
+
/* @__PURE__ */ jsx(OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsx(UISlotProvider, { children: fit ? /* @__PURE__ */ jsx(FitToBox, { children: /* @__PURE__ */ jsx(
|
|
60924
|
+
SchemaRunner,
|
|
60925
|
+
{
|
|
60926
|
+
schema: parseResult.schema,
|
|
60927
|
+
serverUrl,
|
|
60928
|
+
transport,
|
|
60929
|
+
getAccessToken,
|
|
60930
|
+
mockData: effectiveMockData,
|
|
60931
|
+
pageName: currentPage,
|
|
60932
|
+
routeParams,
|
|
60933
|
+
onNavigate: handleNavigateEffect,
|
|
60934
|
+
onNavigateBack: handleNavigateBack,
|
|
60935
|
+
onLocalFallback: handleLocalFallback,
|
|
60936
|
+
persistence
|
|
60937
|
+
}
|
|
60938
|
+
) }) : /* @__PURE__ */ jsx(
|
|
60899
60939
|
SchemaRunner,
|
|
60900
60940
|
{
|
|
60901
60941
|
schema: parseResult.schema,
|
|
@@ -60926,7 +60966,8 @@ function BrowserPlayground({
|
|
|
60926
60966
|
initialPagePath,
|
|
60927
60967
|
height,
|
|
60928
60968
|
className,
|
|
60929
|
-
paused
|
|
60969
|
+
paused,
|
|
60970
|
+
fit
|
|
60930
60971
|
}) {
|
|
60931
60972
|
const [runtime] = useState(
|
|
60932
60973
|
() => new OrbitalServerRuntime({ mode, debug: false })
|
|
@@ -60988,6 +61029,7 @@ function BrowserPlayground({
|
|
|
60988
61029
|
initialPagePath,
|
|
60989
61030
|
height,
|
|
60990
61031
|
className,
|
|
61032
|
+
fit,
|
|
60991
61033
|
isolated: true
|
|
60992
61034
|
}
|
|
60993
61035
|
);
|
|
@@ -7942,7 +7942,7 @@ interface DataGridProps extends DataDndProps {
|
|
|
7942
7942
|
* field whose type is relation. Same contract DetailPanel takes. */
|
|
7943
7943
|
relationsData?: Record<string, readonly RelationOption[]>;
|
|
7944
7944
|
}
|
|
7945
|
-
declare function DataGrid({ entity, fields, columns, itemActions, maxInlineActions, scrollX, cols, gap, minCardWidth, className, isLoading, error, imageField, selectable, selectionEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, renderItem: schemaRenderItem, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataGridProps): string | number | bigint | boolean |
|
|
7945
|
+
declare function DataGrid({ entity, fields, columns, itemActions, maxInlineActions, scrollX, cols, gap, minCardWidth, className, isLoading, error, imageField, selectable, selectionEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, renderItem: schemaRenderItem, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataGridProps): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | React__default.JSX.Element | null | undefined;
|
|
7946
7946
|
declare namespace DataGrid {
|
|
7947
7947
|
var displayName: string;
|
|
7948
7948
|
}
|
|
@@ -8104,7 +8104,7 @@ interface DataListProps extends DataDndProps {
|
|
|
8104
8104
|
* field whose type is relation. Same contract DetailPanel takes. */
|
|
8105
8105
|
relationsData?: Record<string, readonly RelationOption[]>;
|
|
8106
8106
|
}
|
|
8107
|
-
declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, senderField, senderLabelField, currentUser, emptyMessage, className, isLoading, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataListProps): string | number | bigint | boolean |
|
|
8107
|
+
declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, senderField, senderLabelField, currentUser, emptyMessage, className, isLoading, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataListProps): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | React__default.JSX.Element | null | undefined;
|
|
8108
8108
|
declare namespace DataList {
|
|
8109
8109
|
var displayName: string;
|
|
8110
8110
|
}
|
|
@@ -7942,7 +7942,7 @@ interface DataGridProps extends DataDndProps {
|
|
|
7942
7942
|
* field whose type is relation. Same contract DetailPanel takes. */
|
|
7943
7943
|
relationsData?: Record<string, readonly RelationOption[]>;
|
|
7944
7944
|
}
|
|
7945
|
-
declare function DataGrid({ entity, fields, columns, itemActions, maxInlineActions, scrollX, cols, gap, minCardWidth, className, isLoading, error, imageField, selectable, selectionEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, renderItem: schemaRenderItem, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataGridProps): string | number | bigint | boolean |
|
|
7945
|
+
declare function DataGrid({ entity, fields, columns, itemActions, maxInlineActions, scrollX, cols, gap, minCardWidth, className, isLoading, error, imageField, selectable, selectionEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, renderItem: schemaRenderItem, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataGridProps): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | React__default.JSX.Element | null | undefined;
|
|
7946
7946
|
declare namespace DataGrid {
|
|
7947
7947
|
var displayName: string;
|
|
7948
7948
|
}
|
|
@@ -8104,7 +8104,7 @@ interface DataListProps extends DataDndProps {
|
|
|
8104
8104
|
* field whose type is relation. Same contract DetailPanel takes. */
|
|
8105
8105
|
relationsData?: Record<string, readonly RelationOption[]>;
|
|
8106
8106
|
}
|
|
8107
|
-
declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, senderField, senderLabelField, currentUser, emptyMessage, className, isLoading, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataListProps): string | number | bigint | boolean |
|
|
8107
|
+
declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, senderField, senderLabelField, currentUser, emptyMessage, className, isLoading, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, relationsData, }: DataListProps): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | React__default.JSX.Element | null | undefined;
|
|
8108
8108
|
declare namespace DataList {
|
|
8109
8109
|
var displayName: string;
|
|
8110
8110
|
}
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -54844,6 +54844,30 @@ function TraitInitializer({ traits: traits2, routeParams, orbitalNames, onNaviga
|
|
|
54844
54844
|
}, [bridge.connected, orbitalNames, bridge.sendEvent, uiSlots, onNavigate, onNavigateBack, embeddedTraits, activeTraitNames, withActiveTraits, routeParams]);
|
|
54845
54845
|
return /* @__PURE__ */ jsxRuntime.jsx(providers.EntityBindingContext.Provider, { value: entityBindingSource, children });
|
|
54846
54846
|
}
|
|
54847
|
+
function FitToBox({ children }) {
|
|
54848
|
+
const outerRef = React87.useRef(null);
|
|
54849
|
+
const innerRef = React87.useRef(null);
|
|
54850
|
+
const [scale, setScale] = React87.useState(1);
|
|
54851
|
+
React87.useEffect(() => {
|
|
54852
|
+
const outer = outerRef.current;
|
|
54853
|
+
const inner = innerRef.current;
|
|
54854
|
+
if (!outer || !inner) return;
|
|
54855
|
+
const update = () => {
|
|
54856
|
+
const sw = inner.scrollWidth;
|
|
54857
|
+
const sh = inner.scrollHeight;
|
|
54858
|
+
const cw = outer.clientWidth;
|
|
54859
|
+
const ch = outer.clientHeight;
|
|
54860
|
+
if (!sw || !sh || !cw || !ch) return;
|
|
54861
|
+
setScale(Math.min(1, cw / sw, ch / sh));
|
|
54862
|
+
};
|
|
54863
|
+
update();
|
|
54864
|
+
const ro = new ResizeObserver(update);
|
|
54865
|
+
ro.observe(outer);
|
|
54866
|
+
ro.observe(inner);
|
|
54867
|
+
return () => ro.disconnect();
|
|
54868
|
+
}, []);
|
|
54869
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: outerRef, className: "relative h-full w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: innerRef, style: { transform: `scale(${scale})`, transformOrigin: "top left", width: "fit-content" }, children }) });
|
|
54870
|
+
}
|
|
54847
54871
|
function SchemaRunner({ schema, serverUrl, transport, getAccessToken, mockData, pageName, routeParams, onNavigate, onNavigateBack, onLocalFallback, persistence }) {
|
|
54848
54872
|
const { traits: traits2, allEntities, allTraits, ir } = useResolvedSchema(schema, pageName);
|
|
54849
54873
|
const allPageTraits = React87.useMemo(() => {
|
|
@@ -55029,6 +55053,7 @@ function OrbPreview({
|
|
|
55029
55053
|
getAccessToken,
|
|
55030
55054
|
initialPagePath,
|
|
55031
55055
|
isolated = false,
|
|
55056
|
+
fit = false,
|
|
55032
55057
|
user = null
|
|
55033
55058
|
}) {
|
|
55034
55059
|
if (serverUrl && transport) {
|
|
@@ -55185,7 +55210,7 @@ function OrbPreview({
|
|
|
55185
55210
|
Box,
|
|
55186
55211
|
{
|
|
55187
55212
|
ref: containerRef,
|
|
55188
|
-
className:
|
|
55213
|
+
className: `${fit ? "overflow-hidden" : "overflow-auto"} border border-[var(--color-border)] rounded-[var(--radius-md)] ${className ?? ""}`,
|
|
55189
55214
|
style: { height },
|
|
55190
55215
|
children: [
|
|
55191
55216
|
localFallback && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "px-3 py-2 bg-[var(--color-warning)] bg-opacity-10 border-b border-[var(--color-warning)] flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-[var(--color-warning-foreground)] flex-1", children: "Preview server unreachable \u2014 running locally. Server-side state and persistence are disabled." }) }),
|
|
@@ -55198,7 +55223,22 @@ function OrbPreview({
|
|
|
55198
55223
|
storageKey: `almadar:navstack:${parseResult.schema.name ?? "preview"}`,
|
|
55199
55224
|
children: [
|
|
55200
55225
|
/* @__PURE__ */ jsxRuntime.jsx(NavStackRefBridge, { apiRef: navStackRef }),
|
|
55201
|
-
/* @__PURE__ */ jsxRuntime.jsx(providers.OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsxRuntime.jsx(context.UISlotProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
55226
|
+
/* @__PURE__ */ jsxRuntime.jsx(providers.OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsxRuntime.jsx(context.UISlotProvider, { children: fit ? /* @__PURE__ */ jsxRuntime.jsx(FitToBox, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
55227
|
+
SchemaRunner,
|
|
55228
|
+
{
|
|
55229
|
+
schema: parseResult.schema,
|
|
55230
|
+
serverUrl,
|
|
55231
|
+
transport,
|
|
55232
|
+
getAccessToken,
|
|
55233
|
+
mockData: effectiveMockData,
|
|
55234
|
+
pageName: currentPage,
|
|
55235
|
+
routeParams,
|
|
55236
|
+
onNavigate: handleNavigateEffect,
|
|
55237
|
+
onNavigateBack: handleNavigateBack,
|
|
55238
|
+
onLocalFallback: handleLocalFallback,
|
|
55239
|
+
persistence
|
|
55240
|
+
}
|
|
55241
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
55202
55242
|
SchemaRunner,
|
|
55203
55243
|
{
|
|
55204
55244
|
schema: parseResult.schema,
|
|
@@ -55229,7 +55269,8 @@ function BrowserPlayground({
|
|
|
55229
55269
|
initialPagePath,
|
|
55230
55270
|
height,
|
|
55231
55271
|
className,
|
|
55232
|
-
paused
|
|
55272
|
+
paused,
|
|
55273
|
+
fit
|
|
55233
55274
|
}) {
|
|
55234
55275
|
const [runtime] = React87.useState(
|
|
55235
55276
|
() => new OrbitalServerRuntime.OrbitalServerRuntime({ mode, debug: false })
|
|
@@ -55291,6 +55332,7 @@ function BrowserPlayground({
|
|
|
55291
55332
|
initialPagePath,
|
|
55292
55333
|
height,
|
|
55293
55334
|
className,
|
|
55335
|
+
fit,
|
|
55294
55336
|
isolated: true
|
|
55295
55337
|
}
|
|
55296
55338
|
);
|
package/dist/runtime/index.d.cts
CHANGED
|
@@ -293,6 +293,12 @@ interface OrbPreviewProps {
|
|
|
293
293
|
* Default false (standalone previews own the global bridge).
|
|
294
294
|
*/
|
|
295
295
|
isolated?: boolean;
|
|
296
|
+
/**
|
|
297
|
+
* Scale the rendered content down (never up) so it fits the container
|
|
298
|
+
* without scrollbars. For fixed-intrinsic-size content (game canvases);
|
|
299
|
+
* leave off for flow layouts, which should keep their internal scroll.
|
|
300
|
+
*/
|
|
301
|
+
fit?: boolean;
|
|
296
302
|
}
|
|
297
303
|
/**
|
|
298
304
|
* Renders a live preview of an Orbital schema.
|
|
@@ -307,7 +313,7 @@ interface OrbPreviewProps {
|
|
|
307
313
|
* <OrbPreview schema={schema} serverUrl="/api/orbitals" />
|
|
308
314
|
* ```
|
|
309
315
|
*/
|
|
310
|
-
declare function OrbPreview({ schema, mockData, autoMock, height, className, serverUrl, transport, getAccessToken, initialPagePath, isolated, user, }: OrbPreviewProps): React__default.ReactElement;
|
|
316
|
+
declare function OrbPreview({ schema, mockData, autoMock, height, className, serverUrl, transport, getAccessToken, initialPagePath, isolated, fit, user, }: OrbPreviewProps): React__default.ReactElement;
|
|
311
317
|
declare namespace OrbPreview {
|
|
312
318
|
var displayName: string;
|
|
313
319
|
}
|
|
@@ -344,8 +350,10 @@ interface BrowserPlaygroundProps {
|
|
|
344
350
|
className?: string;
|
|
345
351
|
/** Pause the in-process runtime's tick scheduler. Default: undefined (running, same as today). */
|
|
346
352
|
paused?: boolean;
|
|
353
|
+
/** Scale content down (never up) to fit the container without scrollbars — for fixed-size content like game canvases. Forwarded to OrbPreview. */
|
|
354
|
+
fit?: boolean;
|
|
347
355
|
}
|
|
348
|
-
declare function BrowserPlayground({ schema, mode, initialPagePath, height, className, paused, }: BrowserPlaygroundProps): React__default.ReactElement;
|
|
356
|
+
declare function BrowserPlayground({ schema, mode, initialPagePath, height, className, paused, fit, }: BrowserPlaygroundProps): React__default.ReactElement;
|
|
349
357
|
|
|
350
358
|
/**
|
|
351
359
|
* OrbitalPluginHost — runs an ordinary behavior headless against the
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -293,6 +293,12 @@ interface OrbPreviewProps {
|
|
|
293
293
|
* Default false (standalone previews own the global bridge).
|
|
294
294
|
*/
|
|
295
295
|
isolated?: boolean;
|
|
296
|
+
/**
|
|
297
|
+
* Scale the rendered content down (never up) so it fits the container
|
|
298
|
+
* without scrollbars. For fixed-intrinsic-size content (game canvases);
|
|
299
|
+
* leave off for flow layouts, which should keep their internal scroll.
|
|
300
|
+
*/
|
|
301
|
+
fit?: boolean;
|
|
296
302
|
}
|
|
297
303
|
/**
|
|
298
304
|
* Renders a live preview of an Orbital schema.
|
|
@@ -307,7 +313,7 @@ interface OrbPreviewProps {
|
|
|
307
313
|
* <OrbPreview schema={schema} serverUrl="/api/orbitals" />
|
|
308
314
|
* ```
|
|
309
315
|
*/
|
|
310
|
-
declare function OrbPreview({ schema, mockData, autoMock, height, className, serverUrl, transport, getAccessToken, initialPagePath, isolated, user, }: OrbPreviewProps): React__default.ReactElement;
|
|
316
|
+
declare function OrbPreview({ schema, mockData, autoMock, height, className, serverUrl, transport, getAccessToken, initialPagePath, isolated, fit, user, }: OrbPreviewProps): React__default.ReactElement;
|
|
311
317
|
declare namespace OrbPreview {
|
|
312
318
|
var displayName: string;
|
|
313
319
|
}
|
|
@@ -344,8 +350,10 @@ interface BrowserPlaygroundProps {
|
|
|
344
350
|
className?: string;
|
|
345
351
|
/** Pause the in-process runtime's tick scheduler. Default: undefined (running, same as today). */
|
|
346
352
|
paused?: boolean;
|
|
353
|
+
/** Scale content down (never up) to fit the container without scrollbars — for fixed-size content like game canvases. Forwarded to OrbPreview. */
|
|
354
|
+
fit?: boolean;
|
|
347
355
|
}
|
|
348
|
-
declare function BrowserPlayground({ schema, mode, initialPagePath, height, className, paused, }: BrowserPlaygroundProps): React__default.ReactElement;
|
|
356
|
+
declare function BrowserPlayground({ schema, mode, initialPagePath, height, className, paused, fit, }: BrowserPlaygroundProps): React__default.ReactElement;
|
|
349
357
|
|
|
350
358
|
/**
|
|
351
359
|
* OrbitalPluginHost — runs an ordinary behavior headless against the
|
package/dist/runtime/index.js
CHANGED
|
@@ -54770,6 +54770,30 @@ function TraitInitializer({ traits: traits2, routeParams, orbitalNames, onNaviga
|
|
|
54770
54770
|
}, [bridge.connected, orbitalNames, bridge.sendEvent, uiSlots, onNavigate, onNavigateBack, embeddedTraits, activeTraitNames, withActiveTraits, routeParams]);
|
|
54771
54771
|
return /* @__PURE__ */ jsx(EntityBindingContext.Provider, { value: entityBindingSource, children });
|
|
54772
54772
|
}
|
|
54773
|
+
function FitToBox({ children }) {
|
|
54774
|
+
const outerRef = useRef(null);
|
|
54775
|
+
const innerRef = useRef(null);
|
|
54776
|
+
const [scale, setScale] = useState(1);
|
|
54777
|
+
useEffect(() => {
|
|
54778
|
+
const outer = outerRef.current;
|
|
54779
|
+
const inner = innerRef.current;
|
|
54780
|
+
if (!outer || !inner) return;
|
|
54781
|
+
const update = () => {
|
|
54782
|
+
const sw = inner.scrollWidth;
|
|
54783
|
+
const sh = inner.scrollHeight;
|
|
54784
|
+
const cw = outer.clientWidth;
|
|
54785
|
+
const ch = outer.clientHeight;
|
|
54786
|
+
if (!sw || !sh || !cw || !ch) return;
|
|
54787
|
+
setScale(Math.min(1, cw / sw, ch / sh));
|
|
54788
|
+
};
|
|
54789
|
+
update();
|
|
54790
|
+
const ro = new ResizeObserver(update);
|
|
54791
|
+
ro.observe(outer);
|
|
54792
|
+
ro.observe(inner);
|
|
54793
|
+
return () => ro.disconnect();
|
|
54794
|
+
}, []);
|
|
54795
|
+
return /* @__PURE__ */ jsx("div", { ref: outerRef, className: "relative h-full w-full overflow-hidden", children: /* @__PURE__ */ jsx("div", { ref: innerRef, style: { transform: `scale(${scale})`, transformOrigin: "top left", width: "fit-content" }, children }) });
|
|
54796
|
+
}
|
|
54773
54797
|
function SchemaRunner({ schema, serverUrl, transport, getAccessToken, mockData, pageName, routeParams, onNavigate, onNavigateBack, onLocalFallback, persistence }) {
|
|
54774
54798
|
const { traits: traits2, allEntities, allTraits, ir } = useResolvedSchema(schema, pageName);
|
|
54775
54799
|
const allPageTraits = useMemo(() => {
|
|
@@ -54955,6 +54979,7 @@ function OrbPreview({
|
|
|
54955
54979
|
getAccessToken,
|
|
54956
54980
|
initialPagePath,
|
|
54957
54981
|
isolated = false,
|
|
54982
|
+
fit = false,
|
|
54958
54983
|
user = null
|
|
54959
54984
|
}) {
|
|
54960
54985
|
if (serverUrl && transport) {
|
|
@@ -55111,7 +55136,7 @@ function OrbPreview({
|
|
|
55111
55136
|
Box,
|
|
55112
55137
|
{
|
|
55113
55138
|
ref: containerRef,
|
|
55114
|
-
className:
|
|
55139
|
+
className: `${fit ? "overflow-hidden" : "overflow-auto"} border border-[var(--color-border)] rounded-[var(--radius-md)] ${className ?? ""}`,
|
|
55115
55140
|
style: { height },
|
|
55116
55141
|
children: [
|
|
55117
55142
|
localFallback && /* @__PURE__ */ jsx(Box, { className: "px-3 py-2 bg-[var(--color-warning)] bg-opacity-10 border-b border-[var(--color-warning)] flex items-center gap-2", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-[var(--color-warning-foreground)] flex-1", children: "Preview server unreachable \u2014 running locally. Server-side state and persistence are disabled." }) }),
|
|
@@ -55124,7 +55149,22 @@ function OrbPreview({
|
|
|
55124
55149
|
storageKey: `almadar:navstack:${parseResult.schema.name ?? "preview"}`,
|
|
55125
55150
|
children: [
|
|
55126
55151
|
/* @__PURE__ */ jsx(NavStackRefBridge, { apiRef: navStackRef }),
|
|
55127
|
-
/* @__PURE__ */ jsx(OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsx(UISlotProvider, { children: /* @__PURE__ */ jsx(
|
|
55152
|
+
/* @__PURE__ */ jsx(OrbitalProvider, { initialData: effectiveMockData, skipTheme: true, verification: true, isolated, user, children: /* @__PURE__ */ jsx(UISlotProvider, { children: fit ? /* @__PURE__ */ jsx(FitToBox, { children: /* @__PURE__ */ jsx(
|
|
55153
|
+
SchemaRunner,
|
|
55154
|
+
{
|
|
55155
|
+
schema: parseResult.schema,
|
|
55156
|
+
serverUrl,
|
|
55157
|
+
transport,
|
|
55158
|
+
getAccessToken,
|
|
55159
|
+
mockData: effectiveMockData,
|
|
55160
|
+
pageName: currentPage,
|
|
55161
|
+
routeParams,
|
|
55162
|
+
onNavigate: handleNavigateEffect,
|
|
55163
|
+
onNavigateBack: handleNavigateBack,
|
|
55164
|
+
onLocalFallback: handleLocalFallback,
|
|
55165
|
+
persistence
|
|
55166
|
+
}
|
|
55167
|
+
) }) : /* @__PURE__ */ jsx(
|
|
55128
55168
|
SchemaRunner,
|
|
55129
55169
|
{
|
|
55130
55170
|
schema: parseResult.schema,
|
|
@@ -55155,7 +55195,8 @@ function BrowserPlayground({
|
|
|
55155
55195
|
initialPagePath,
|
|
55156
55196
|
height,
|
|
55157
55197
|
className,
|
|
55158
|
-
paused
|
|
55198
|
+
paused,
|
|
55199
|
+
fit
|
|
55159
55200
|
}) {
|
|
55160
55201
|
const [runtime] = useState(
|
|
55161
55202
|
() => new OrbitalServerRuntime({ mode, debug: false })
|
|
@@ -55217,6 +55258,7 @@ function BrowserPlayground({
|
|
|
55217
55258
|
initialPagePath,
|
|
55218
55259
|
height,
|
|
55219
55260
|
className,
|
|
55261
|
+
fit,
|
|
55220
55262
|
isolated: true
|
|
55221
55263
|
}
|
|
55222
55264
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/ui",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.17.0",
|
|
4
4
|
"description": "React UI components, hooks, and providers for Almadar",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"@almadar/core": "^10.92.0",
|
|
122
122
|
"@almadar/evaluator": "^2.45.0",
|
|
123
123
|
"@almadar/logger": "^1.12.0",
|
|
124
|
-
"@almadar/runtime": "^6.
|
|
124
|
+
"@almadar/runtime": "^6.78.0",
|
|
125
125
|
"@almadar/std": "^16.213.0",
|
|
126
126
|
"@almadar/syntax": "^1.17.0",
|
|
127
127
|
"@dnd-kit/core": "^6.3.1",
|