@almadar/ui 6.28.0 → 6.30.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 (54) hide show
  1. package/dist/{EntityBindingContext-C6FgxdfG.d.cts → EntityBindingContext-ChCONv2W.d.cts} +3 -39
  2. package/dist/{EntityBindingContext-C6FgxdfG.d.ts → EntityBindingContext-ChCONv2W.d.ts} +3 -39
  3. package/dist/avl/index.cjs +74 -48
  4. package/dist/avl/index.js +74 -48
  5. package/dist/components/index.cjs +54 -45
  6. package/dist/components/index.d.cts +1 -1
  7. package/dist/components/index.d.ts +1 -1
  8. package/dist/components/index.js +54 -45
  9. package/dist/context/index.cjs +135 -105
  10. package/dist/context/index.d.cts +2 -60
  11. package/dist/context/index.d.ts +2 -60
  12. package/dist/context/index.js +135 -105
  13. package/dist/lib/index.cjs +455 -0
  14. package/dist/lib/index.d.cts +42 -1
  15. package/dist/lib/index.d.ts +42 -1
  16. package/dist/lib/index.js +438 -1
  17. package/dist/marketing/index.cjs +4 -5
  18. package/dist/marketing/index.js +4 -5
  19. package/dist/providers/index.cjs +194 -156
  20. package/dist/providers/index.d.cts +1 -1
  21. package/dist/providers/index.d.ts +1 -1
  22. package/dist/providers/index.js +194 -156
  23. package/dist/runtime/index.cjs +74 -48
  24. package/dist/runtime/index.d.cts +16 -2
  25. package/dist/runtime/index.d.ts +16 -2
  26. package/dist/runtime/index.js +74 -48
  27. package/dist/themeTokens-DVRwufw8.d.cts +112 -0
  28. package/dist/themeTokens-DVRwufw8.d.ts +112 -0
  29. package/package.json +7 -6
  30. package/scripts/audit-tailwind-safelist.ts +4 -0
  31. package/tailwind-preset.cjs +155 -28
  32. package/themes/almadar-website.css +37 -107
  33. package/themes/almadar.css +37 -108
  34. package/themes/atelier.css +145 -240
  35. package/themes/bloomberg-dense.css +145 -252
  36. package/themes/clay.css +39 -137
  37. package/themes/comic.css +39 -145
  38. package/themes/corporate.css +39 -131
  39. package/themes/game-adventure.css +22 -87
  40. package/themes/game-rpg.css +22 -84
  41. package/themes/game-sci-fi.css +22 -88
  42. package/themes/game-ui-pack.css +22 -85
  43. package/themes/gazette.css +43 -135
  44. package/themes/glass.css +39 -148
  45. package/themes/kiosk.css +51 -146
  46. package/themes/linear-clean.css +145 -215
  47. package/themes/minimalist.css +39 -125
  48. package/themes/neon.css +39 -132
  49. package/themes/notion-editorial.css +145 -215
  50. package/themes/prism.css +37 -100
  51. package/themes/retro.css +39 -130
  52. package/themes/terminal.css +61 -152
  53. package/themes/trait-wars.css +121 -285
  54. package/themes/wireframe.css +41 -128
@@ -7058,6 +7058,13 @@ var init_slot_types = __esm({
7058
7058
  nextRefId = 1;
7059
7059
  }
7060
7060
  });
7061
+ var SlotContainedContext;
7062
+ var init_slotContained = __esm({
7063
+ "lib/slotContained.ts"() {
7064
+ "use client";
7065
+ SlotContainedContext = React79.createContext(false);
7066
+ }
7067
+ });
7061
7068
  exports.ErrorState = void 0;
7062
7069
  var init_ErrorState = __esm({
7063
7070
  "components/core/molecules/ErrorState.tsx"() {
@@ -7497,11 +7504,10 @@ var init_HeroSection = __esm({
7497
7504
  };
7498
7505
  backgroundStyles = {
7499
7506
  dark: "bg-foreground text-background",
7500
- gradient: [
7501
- "bg-[radial-gradient(ellipse_at_top,var(--color-primary)/0.08,transparent_60%),",
7502
- "radial-gradient(ellipse_at_bottom_right,var(--color-accent)/0.06,transparent_50%)]",
7503
- "bg-background"
7504
- ].join(" "),
7507
+ // A single bracket value: joining this as two array entries put a space
7508
+ // inside the class (Tailwind splits utilities on whitespace), so neither
7509
+ // half was a valid utility and the gradient rendered as nothing.
7510
+ gradient: "bg-[radial-gradient(ellipse_at_top,var(--color-primary)/0.08,transparent_60%),radial-gradient(ellipse_at_bottom_right,var(--color-accent)/0.06,transparent_50%)] bg-background",
7505
7511
  subtle: "bg-muted/30"
7506
7512
  };
7507
7513
  MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -36972,7 +36978,6 @@ function TableView({
36972
36978
  columns,
36973
36979
  fields,
36974
36980
  itemActions,
36975
- maxInlineActions,
36976
36981
  itemClickEvent = "",
36977
36982
  selectable = false,
36978
36983
  selectEvent,
@@ -37006,8 +37011,7 @@ function TableView({
37006
37011
  const [localSelected, setLocalSelected] = React79__namespace.default.useState(/* @__PURE__ */ new Set());
37007
37012
  const colDefs = (Array.isArray(columns) ? columns : void 0) ?? (Array.isArray(fields) ? fields : void 0) ?? [];
37008
37013
  const actionDefs = Array.isArray(itemActions) ? itemActions : [];
37009
- const inlineActions = maxInlineActions != null ? actionDefs.slice(0, maxInlineActions) : [];
37010
- const overflowActions = maxInlineActions != null ? actionDefs.slice(maxInlineActions) : actionDefs;
37014
+ const overflowActions = actionDefs;
37011
37015
  const fireAction = (action, row) => eventBus.emit(`UI:${action.event}`, {
37012
37016
  id: row.id,
37013
37017
  row
@@ -37189,7 +37193,7 @@ function TableView({
37189
37193
  }
37190
37194
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-foreground", children: formatCell(raw, col.format, relationsData?.[col.field ?? col.key]) }) }, col.key);
37191
37195
  }),
37192
- hasActions && /* @__PURE__ */ jsxRuntime.jsxs(
37196
+ hasActions && /* @__PURE__ */ jsxRuntime.jsx(
37193
37197
  exports.HStack,
37194
37198
  {
37195
37199
  gap: "xs",
@@ -37203,38 +37207,20 @@ function TableView({
37203
37207
  "border-l border-[var(--color-border)]",
37204
37208
  lk.striped && index % 2 === 1 ? "bg-[var(--color-surface-subtle)]" : "bg-[var(--color-card)] group-hover:bg-[var(--color-surface-subtle)]"
37205
37209
  ),
37206
- children: [
37207
- inlineActions.map((action) => /* @__PURE__ */ jsxRuntime.jsxs(
37208
- exports.Button,
37209
- {
37210
- variant: action.variant ?? "ghost",
37211
- size: "sm",
37212
- onClick: () => fireAction(action, row),
37213
- "data-testid": `action-${action.event}`,
37214
- "data-row-id": String(row.id),
37215
- className: cn(action.variant === "danger" && "text-error hover:bg-error/10"),
37216
- children: [
37217
- action.icon && renderIconInput3(action.icon, { size: "xs", className: "mr-1" }),
37218
- action.label
37219
- ]
37220
- },
37221
- action.event
37222
- )),
37223
- overflowActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
37224
- exports.Menu,
37225
- {
37226
- position: "bottom-end",
37227
- trigger: /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", "data-row-id": String(row.id), children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "more-horizontal", size: "xs" }) }),
37228
- items: overflowActions.map((action) => ({
37229
- label: action.label,
37230
- icon: action.icon,
37231
- event: action.event,
37232
- variant: action.variant === "danger" ? "danger" : "default",
37233
- onClick: () => fireAction(action, row)
37234
- }))
37235
- }
37236
- )
37237
- ]
37210
+ children: overflowActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
37211
+ exports.Menu,
37212
+ {
37213
+ position: "bottom-end",
37214
+ trigger: /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", "data-row-id": String(row.id), children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "more-horizontal", size: "xs" }) }),
37215
+ items: overflowActions.map((action) => ({
37216
+ label: action.label,
37217
+ icon: action.icon,
37218
+ event: action.event,
37219
+ variant: action.variant === "danger" ? "danger" : "default",
37220
+ onClick: () => fireAction(action, row)
37221
+ }))
37222
+ }
37223
+ )
37238
37224
  }
37239
37225
  )
37240
37226
  ]
@@ -46890,6 +46876,7 @@ var init_DetailPanel = __esm({
46890
46876
  init_EmptyState();
46891
46877
  init_cn();
46892
46878
  init_portalRoot();
46879
+ init_slotContained();
46893
46880
  init_format();
46894
46881
  init_getNestedValue();
46895
46882
  init_relationLabel();
@@ -46921,6 +46908,7 @@ var init_DetailPanel = __esm({
46921
46908
  }) => {
46922
46909
  const eventBus = useEventBus();
46923
46910
  const { t } = hooks.useTranslate();
46911
+ const contained = React79.useContext(SlotContainedContext);
46924
46912
  const [titleDraft, setTitleDraft] = React79__namespace.default.useState(null);
46925
46913
  const isFieldDefArray = (arr) => {
46926
46914
  if (!arr || arr.length === 0) return false;
@@ -47308,8 +47296,9 @@ var init_DetailPanel = __esm({
47308
47296
  if (!slideOver) {
47309
47297
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className, children: content });
47310
47298
  }
47311
- const panel = /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: cn("fixed inset-y-0 right-0 w-full max-w-2xl bg-card shadow-lg z-50 overflow-y-auto p-6", className), children: content });
47312
- return typeof document === "undefined" ? panel : reactDom.createPortal(panel, getOrCreatePortalRoot());
47299
+ const panel = /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: cn(contained ? "absolute" : "fixed", "inset-y-0 right-0 w-full max-w-2xl bg-card shadow-lg z-50 overflow-y-auto p-6", className), children: content });
47300
+ if (contained || typeof document === "undefined") return panel;
47301
+ return reactDom.createPortal(panel, getOrCreatePortalRoot());
47313
47302
  };
47314
47303
  exports.DetailPanel.displayName = "DetailPanel";
47315
47304
  }
@@ -53787,6 +53776,7 @@ var init_component_registry_generated = __esm({
53787
53776
  // components/core/organisms/UISlotRenderer.tsx
53788
53777
  var UISlotRenderer_exports = {};
53789
53778
  __export(UISlotRenderer_exports, {
53779
+ SlotContainedContext: () => SlotContainedContext,
53790
53780
  SlotContentRenderer: () => SlotContentRenderer,
53791
53781
  SuspenseConfigProvider: () => SuspenseConfigProvider,
53792
53782
  UISlotComponent: () => UISlotComponent,
@@ -53959,6 +53949,25 @@ function renderContainedPortal(t, slot, content, onDismiss) {
53959
53949
  }
53960
53950
  );
53961
53951
  case "drawer":
53952
+ if (content.pattern === "detail-panel" && content.props.slideOver === true) {
53953
+ return /* @__PURE__ */ jsxRuntime.jsx(
53954
+ exports.Box,
53955
+ {
53956
+ id: slotId,
53957
+ className: "absolute inset-0 z-50 overflow-hidden",
53958
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
53959
+ onClick: onDismiss,
53960
+ children: /* @__PURE__ */ jsxRuntime.jsx(
53961
+ exports.Box,
53962
+ {
53963
+ className: "absolute inset-y-0 right-0 pointer-events-auto",
53964
+ onClick: (e) => e.stopPropagation(),
53965
+ children: slotContent
53966
+ }
53967
+ )
53968
+ }
53969
+ );
53970
+ }
53962
53971
  return /* @__PURE__ */ jsxRuntime.jsx(
53963
53972
  exports.Box,
53964
53973
  {
@@ -54810,7 +54819,7 @@ function UISlotRenderer({
54810
54819
  }
54811
54820
  return wrapped;
54812
54821
  }
54813
- var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
54822
+ var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SLOT_SKELETON_MAP, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
54814
54823
  var init_UISlotRenderer = __esm({
54815
54824
  "components/core/organisms/UISlotRenderer.tsx"() {
54816
54825
  "use client";
@@ -54825,6 +54834,7 @@ var init_UISlotRenderer = __esm({
54825
54834
  init_cn();
54826
54835
  init_format();
54827
54836
  init_portalRoot();
54837
+ init_slotContained();
54828
54838
  init_ErrorBoundary();
54829
54839
  init_Skeleton();
54830
54840
  init_renderer();
@@ -54834,7 +54844,6 @@ var init_UISlotRenderer = __esm({
54834
54844
  scopeWrapLog = logger.createLogger("almadar:ui:scope-wrap");
54835
54845
  TRAIT_BINDING_RE = /^@trait\.([A-Z][A-Za-z0-9]*)$/;
54836
54846
  SuspenseConfigContext = React79.createContext({ enabled: false });
54837
- SlotContainedContext = React79.createContext(false);
54838
54847
  SuspenseConfigProvider.displayName = "SuspenseConfigProvider";
54839
54848
  SLOT_SKELETON_MAP = {
54840
54849
  main: "table",
@@ -8306,7 +8306,7 @@ interface TableViewProps extends DataDndProps {
8306
8306
  * column whose field is relation-typed. Same contract DetailPanel takes. */
8307
8307
  relationsData?: Record<string, readonly RelationOption[]>;
8308
8308
  }
8309
- declare function TableView({ entity, columns, fields, itemActions, maxInlineActions, itemClickEvent, selectable, selectEvent, selectedIds, sortEvent, sortColumn, sortDirection, className, emptyMessage, isLoading, error, groupBy, pageSize, children, renderItem: _schemaRenderItem, look, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, relationsData, }: TableViewProps): React__default.JSX.Element;
8309
+ declare function TableView({ entity, columns, fields, itemActions, itemClickEvent, selectable, selectEvent, selectedIds, sortEvent, sortColumn, sortDirection, className, emptyMessage, isLoading, error, groupBy, pageSize, children, renderItem: _schemaRenderItem, look, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, relationsData, }: TableViewProps): React__default.JSX.Element;
8310
8310
  declare namespace TableView {
8311
8311
  var displayName: string;
8312
8312
  }
@@ -8306,7 +8306,7 @@ interface TableViewProps extends DataDndProps {
8306
8306
  * column whose field is relation-typed. Same contract DetailPanel takes. */
8307
8307
  relationsData?: Record<string, readonly RelationOption[]>;
8308
8308
  }
8309
- declare function TableView({ entity, columns, fields, itemActions, maxInlineActions, itemClickEvent, selectable, selectEvent, selectedIds, sortEvent, sortColumn, sortDirection, className, emptyMessage, isLoading, error, groupBy, pageSize, children, renderItem: _schemaRenderItem, look, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, relationsData, }: TableViewProps): React__default.JSX.Element;
8309
+ declare function TableView({ entity, columns, fields, itemActions, itemClickEvent, selectable, selectEvent, selectedIds, sortEvent, sortColumn, sortDirection, className, emptyMessage, isLoading, error, groupBy, pageSize, children, renderItem: _schemaRenderItem, look, dragGroup, accepts, sortable, dropEvent, reorderEvent, positionEvent, dndItemIdField, dndRoot, relationsData, }: TableViewProps): React__default.JSX.Element;
8310
8310
  declare namespace TableView {
8311
8311
  var displayName: string;
8312
8312
  }
@@ -6983,6 +6983,13 @@ var init_slot_types = __esm({
6983
6983
  nextRefId = 1;
6984
6984
  }
6985
6985
  });
6986
+ var SlotContainedContext;
6987
+ var init_slotContained = __esm({
6988
+ "lib/slotContained.ts"() {
6989
+ "use client";
6990
+ SlotContainedContext = createContext(false);
6991
+ }
6992
+ });
6986
6993
  var ErrorState;
6987
6994
  var init_ErrorState = __esm({
6988
6995
  "components/core/molecules/ErrorState.tsx"() {
@@ -7422,11 +7429,10 @@ var init_HeroSection = __esm({
7422
7429
  };
7423
7430
  backgroundStyles = {
7424
7431
  dark: "bg-foreground text-background",
7425
- gradient: [
7426
- "bg-[radial-gradient(ellipse_at_top,var(--color-primary)/0.08,transparent_60%),",
7427
- "radial-gradient(ellipse_at_bottom_right,var(--color-accent)/0.06,transparent_50%)]",
7428
- "bg-background"
7429
- ].join(" "),
7432
+ // A single bracket value: joining this as two array entries put a space
7433
+ // inside the class (Tailwind splits utilities on whitespace), so neither
7434
+ // half was a valid utility and the gradient rendered as nothing.
7435
+ gradient: "bg-[radial-gradient(ellipse_at_top,var(--color-primary)/0.08,transparent_60%),radial-gradient(ellipse_at_bottom_right,var(--color-accent)/0.06,transparent_50%)] bg-background",
7430
7436
  subtle: "bg-muted/30"
7431
7437
  };
7432
7438
  MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsx(
@@ -36897,7 +36903,6 @@ function TableView({
36897
36903
  columns,
36898
36904
  fields,
36899
36905
  itemActions,
36900
- maxInlineActions,
36901
36906
  itemClickEvent = "",
36902
36907
  selectable = false,
36903
36908
  selectEvent,
@@ -36931,8 +36936,7 @@ function TableView({
36931
36936
  const [localSelected, setLocalSelected] = React79__default.useState(/* @__PURE__ */ new Set());
36932
36937
  const colDefs = (Array.isArray(columns) ? columns : void 0) ?? (Array.isArray(fields) ? fields : void 0) ?? [];
36933
36938
  const actionDefs = Array.isArray(itemActions) ? itemActions : [];
36934
- const inlineActions = maxInlineActions != null ? actionDefs.slice(0, maxInlineActions) : [];
36935
- const overflowActions = maxInlineActions != null ? actionDefs.slice(maxInlineActions) : actionDefs;
36939
+ const overflowActions = actionDefs;
36936
36940
  const fireAction = (action, row) => eventBus.emit(`UI:${action.event}`, {
36937
36941
  id: row.id,
36938
36942
  row
@@ -37114,7 +37118,7 @@ function TableView({
37114
37118
  }
37115
37119
  return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx("span", { className: "truncate text-foreground", children: formatCell(raw, col.format, relationsData?.[col.field ?? col.key]) }) }, col.key);
37116
37120
  }),
37117
- hasActions && /* @__PURE__ */ jsxs(
37121
+ hasActions && /* @__PURE__ */ jsx(
37118
37122
  HStack,
37119
37123
  {
37120
37124
  gap: "xs",
@@ -37128,38 +37132,20 @@ function TableView({
37128
37132
  "border-l border-[var(--color-border)]",
37129
37133
  lk.striped && index % 2 === 1 ? "bg-[var(--color-surface-subtle)]" : "bg-[var(--color-card)] group-hover:bg-[var(--color-surface-subtle)]"
37130
37134
  ),
37131
- children: [
37132
- inlineActions.map((action) => /* @__PURE__ */ jsxs(
37133
- Button,
37134
- {
37135
- variant: action.variant ?? "ghost",
37136
- size: "sm",
37137
- onClick: () => fireAction(action, row),
37138
- "data-testid": `action-${action.event}`,
37139
- "data-row-id": String(row.id),
37140
- className: cn(action.variant === "danger" && "text-error hover:bg-error/10"),
37141
- children: [
37142
- action.icon && renderIconInput3(action.icon, { size: "xs", className: "mr-1" }),
37143
- action.label
37144
- ]
37145
- },
37146
- action.event
37147
- )),
37148
- overflowActions.length > 0 && /* @__PURE__ */ jsx(
37149
- Menu,
37150
- {
37151
- position: "bottom-end",
37152
- trigger: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", "data-row-id": String(row.id), children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", size: "xs" }) }),
37153
- items: overflowActions.map((action) => ({
37154
- label: action.label,
37155
- icon: action.icon,
37156
- event: action.event,
37157
- variant: action.variant === "danger" ? "danger" : "default",
37158
- onClick: () => fireAction(action, row)
37159
- }))
37160
- }
37161
- )
37162
- ]
37135
+ children: overflowActions.length > 0 && /* @__PURE__ */ jsx(
37136
+ Menu,
37137
+ {
37138
+ position: "bottom-end",
37139
+ trigger: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", "data-row-id": String(row.id), children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", size: "xs" }) }),
37140
+ items: overflowActions.map((action) => ({
37141
+ label: action.label,
37142
+ icon: action.icon,
37143
+ event: action.event,
37144
+ variant: action.variant === "danger" ? "danger" : "default",
37145
+ onClick: () => fireAction(action, row)
37146
+ }))
37147
+ }
37148
+ )
37163
37149
  }
37164
37150
  )
37165
37151
  ]
@@ -46815,6 +46801,7 @@ var init_DetailPanel = __esm({
46815
46801
  init_EmptyState();
46816
46802
  init_cn();
46817
46803
  init_portalRoot();
46804
+ init_slotContained();
46818
46805
  init_format();
46819
46806
  init_getNestedValue();
46820
46807
  init_relationLabel();
@@ -46846,6 +46833,7 @@ var init_DetailPanel = __esm({
46846
46833
  }) => {
46847
46834
  const eventBus = useEventBus();
46848
46835
  const { t } = useTranslate();
46836
+ const contained = useContext(SlotContainedContext);
46849
46837
  const [titleDraft, setTitleDraft] = React79__default.useState(null);
46850
46838
  const isFieldDefArray = (arr) => {
46851
46839
  if (!arr || arr.length === 0) return false;
@@ -47233,8 +47221,9 @@ var init_DetailPanel = __esm({
47233
47221
  if (!slideOver) {
47234
47222
  return /* @__PURE__ */ jsx(Box, { className, children: content });
47235
47223
  }
47236
- const panel = /* @__PURE__ */ jsx(Box, { className: cn("fixed inset-y-0 right-0 w-full max-w-2xl bg-card shadow-lg z-50 overflow-y-auto p-6", className), children: content });
47237
- return typeof document === "undefined" ? panel : createPortal(panel, getOrCreatePortalRoot());
47224
+ const panel = /* @__PURE__ */ jsx(Box, { className: cn(contained ? "absolute" : "fixed", "inset-y-0 right-0 w-full max-w-2xl bg-card shadow-lg z-50 overflow-y-auto p-6", className), children: content });
47225
+ if (contained || typeof document === "undefined") return panel;
47226
+ return createPortal(panel, getOrCreatePortalRoot());
47238
47227
  };
47239
47228
  DetailPanel.displayName = "DetailPanel";
47240
47229
  }
@@ -53712,6 +53701,7 @@ var init_component_registry_generated = __esm({
53712
53701
  // components/core/organisms/UISlotRenderer.tsx
53713
53702
  var UISlotRenderer_exports = {};
53714
53703
  __export(UISlotRenderer_exports, {
53704
+ SlotContainedContext: () => SlotContainedContext,
53715
53705
  SlotContentRenderer: () => SlotContentRenderer,
53716
53706
  SuspenseConfigProvider: () => SuspenseConfigProvider,
53717
53707
  UISlotComponent: () => UISlotComponent,
@@ -53884,6 +53874,25 @@ function renderContainedPortal(t, slot, content, onDismiss) {
53884
53874
  }
53885
53875
  );
53886
53876
  case "drawer":
53877
+ if (content.pattern === "detail-panel" && content.props.slideOver === true) {
53878
+ return /* @__PURE__ */ jsx(
53879
+ Box,
53880
+ {
53881
+ id: slotId,
53882
+ className: "absolute inset-0 z-50 overflow-hidden",
53883
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
53884
+ onClick: onDismiss,
53885
+ children: /* @__PURE__ */ jsx(
53886
+ Box,
53887
+ {
53888
+ className: "absolute inset-y-0 right-0 pointer-events-auto",
53889
+ onClick: (e) => e.stopPropagation(),
53890
+ children: slotContent
53891
+ }
53892
+ )
53893
+ }
53894
+ );
53895
+ }
53887
53896
  return /* @__PURE__ */ jsx(
53888
53897
  Box,
53889
53898
  {
@@ -54735,7 +54744,7 @@ function UISlotRenderer({
54735
54744
  }
54736
54745
  return wrapped;
54737
54746
  }
54738
- var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
54747
+ var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SLOT_SKELETON_MAP, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
54739
54748
  var init_UISlotRenderer = __esm({
54740
54749
  "components/core/organisms/UISlotRenderer.tsx"() {
54741
54750
  "use client";
@@ -54750,6 +54759,7 @@ var init_UISlotRenderer = __esm({
54750
54759
  init_cn();
54751
54760
  init_format();
54752
54761
  init_portalRoot();
54762
+ init_slotContained();
54753
54763
  init_ErrorBoundary();
54754
54764
  init_Skeleton();
54755
54765
  init_renderer();
@@ -54759,7 +54769,6 @@ var init_UISlotRenderer = __esm({
54759
54769
  scopeWrapLog = createLogger("almadar:ui:scope-wrap");
54760
54770
  TRAIT_BINDING_RE = /^@trait\.([A-Z][A-Za-z0-9]*)$/;
54761
54771
  SuspenseConfigContext = createContext({ enabled: false });
54762
- SlotContainedContext = createContext(false);
54763
54772
  SuspenseConfigProvider.displayName = "SuspenseConfigProvider";
54764
54773
  SLOT_SKELETON_MAP = {
54765
54774
  main: "table",