@deneb-ui/ui 2.0.30 → 2.0.32

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.
@@ -10,7 +10,7 @@ export declare const PREVIEW_FOCUS_MESSAGE = "FIVORA_PREVIEW_FOCUS_PAGE";
10
10
  export declare const LEGACY_PREVIEW_FOCUS_MESSAGE: string;
11
11
  export declare const PREVIEW_FIELD_ATTRIBUTE = "data-preview-field-path";
12
12
  export { STYLE_PATCH_MESSAGE, DENEB_STYLE_PATCH_MESSAGE } from '@deneb-ui/core';
13
- export type GenericRecord = Record<string, unknown>;
13
+ export type GenericRecord = Record<string, any>;
14
14
  export type SiteData = {
15
15
  project?: {
16
16
  id?: string | null;
@@ -31,7 +31,7 @@ export type SiteData = {
31
31
  };
32
32
  export declare const SiteDataContext: React.Context<SiteData>;
33
33
  export declare function isRecord(value: unknown): value is GenericRecord;
34
- export declare function mergeSiteData(current: unknown, incoming: unknown): unknown;
34
+ export declare function mergeSiteData(current: unknown, incoming: unknown, depth?: number, seen?: WeakSet<object>): unknown;
35
35
  export declare function normalizeOrigin(value?: string | null, baseOrigin?: string | null): string | null;
36
36
  /**
37
37
  * Match the injected preview focus bridge: after in-iframe navigations,
@@ -50,6 +50,7 @@ export declare function useSiteData<T = SiteData>(): T;
50
50
  export declare function contentObject(value: unknown): GenericRecord;
51
51
  export declare function contentText(value: unknown): string;
52
52
  export declare function contentList<Item = unknown>(value: unknown): Item[];
53
+ export declare function contentNumber(value: unknown, fallback?: number): number;
53
54
  export declare function parseFieldPath(path: string): Array<string | number>;
54
55
  export declare function getFieldStyle(content: unknown, path?: string): GenericRecord | null;
55
56
  export declare function useFieldStyle(path?: string): GenericRecord | null;
@@ -12,6 +12,7 @@ exports.useSiteData = useSiteData;
12
12
  exports.contentObject = contentObject;
13
13
  exports.contentText = contentText;
14
14
  exports.contentList = contentList;
15
+ exports.contentNumber = contentNumber;
15
16
  exports.parseFieldPath = parseFieldPath;
16
17
  exports.getFieldStyle = getFieldStyle;
17
18
  exports.useFieldStyle = useFieldStyle;
@@ -47,11 +48,16 @@ exports.SiteDataContext = (0, react_1.createContext)({});
47
48
  function isRecord(value) {
48
49
  return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
49
50
  }
50
- function mergeSiteData(current, incoming) {
51
+ function mergeSiteData(current, incoming, depth = 0, seen = new WeakSet()) {
52
+ if (depth > 50)
53
+ return incoming;
51
54
  if (Array.isArray(incoming))
52
55
  return incoming;
53
56
  if (!isRecord(incoming))
54
57
  return incoming;
58
+ if (seen.has(incoming))
59
+ return incoming;
60
+ seen.add(incoming);
55
61
  const base = isRecord(current) ? current : {};
56
62
  const next = { ...base };
57
63
  for (const key of Object.keys(incoming)) {
@@ -61,7 +67,7 @@ function mergeSiteData(current, incoming) {
61
67
  next[key] = incoming[key];
62
68
  continue;
63
69
  }
64
- next[key] = mergeSiteData(base[key], incoming[key]);
70
+ next[key] = mergeSiteData(base[key], incoming[key], depth + 1, seen);
65
71
  }
66
72
  return next;
67
73
  }
@@ -280,6 +286,9 @@ function contentText(value) {
280
286
  function contentList(value) {
281
287
  return Array.isArray(value) ? value : [];
282
288
  }
289
+ function contentNumber(value, fallback = 0) {
290
+ return typeof value === 'number' && !Number.isNaN(value) ? value : fallback;
291
+ }
283
292
  function parseFieldPath(path) {
284
293
  if (!path)
285
294
  return [];
package/dist/index.d.ts CHANGED
@@ -73,11 +73,6 @@ export { EditableFooter as Footer } from './EditableFooter';
73
73
  export { EditableHeroCentered as Hero, EditableHeroSplit as HeroSplit } from './EditableHero';
74
74
  export { EditableAnnouncementBar as AnnouncementBar } from './EditableAnnouncementBar';
75
75
  export { EditableCategoryPills as CategoryPills } from './EditableCategoryPills';
76
- export { StickyMobileBar } from './StickyMobileBar';
77
- export { TrustBadges } from './TrustBadges';
78
- export { ProductQuickView } from './ProductQuickView';
79
- export { CookieConsentBanner } from './CookieConsentBanner';
80
- export { FloatingContactWidget } from './contact/FloatingContactWidget';
81
76
  export { EditableCartDrawer as CartDrawer } from './EditableCartDrawer';
82
77
  export { EditableFilterSidebar as FilterSidebar } from './EditableFilterSidebar';
83
78
  /**
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.Hero = exports.Footer = exports.Header = exports.Navbar = exports.ContactForm = exports.FAQ = exports.Accordion = exports.TestimonialCard = exports.PricingCard = exports.ServiceCard = exports.CustomerReviews = exports.ProductDetail = exports.ProductGrid = exports.ProductCard = exports.List = exports.Box = exports.Section = exports.Grid = exports.Image = exports.Quote = exports.Badge = exports.Paragraph = exports.Heading = exports.Text = exports.Dialog = exports.Card = exports.Button = exports.collectStyleTargetsFromHtml = exports.validateStyleTree = exports.styleToCssVariables = exports.patchStyleByPath = exports.patchElementStyle = exports.STYLE_TYPE_ATTRIBUTE = exports.STYLE_TARGET_ATTRIBUTE = exports.DENEB_STYLE_PATCH_MESSAGE = exports.STYLE_PATCH_MESSAGE = exports.formatResponsiveFontSize = exports.resolveInstallableFont = exports.normalizeFontId = exports.lookupFontDefinition = exports.listFontsByCategory = exports.collectFontIdsFromSiteData = exports.buildGoogleFontsStylesheetUrl = exports.DENEB_GOOGLE_FONT_COUNT = exports.DENEB_FONT_REGISTRY = exports.useDenebFonts = exports.DENEB_FONTS_LINK_ID = exports.FontLoader = exports.DenebComponentStyles = exports.ResponsiveBaseStyles = void 0;
22
- exports.DENEB_AUTHOR = exports.DENEB_FRAMEWORK_VERSION = exports.DENEB_FRAMEWORK_NAME = exports.FilterSidebar = exports.CartDrawer = exports.FloatingContactWidget = exports.CookieConsentBanner = exports.ProductQuickView = exports.TrustBadges = exports.StickyMobileBar = exports.CategoryPills = exports.AnnouncementBar = exports.HeroSplit = void 0;
22
+ exports.DENEB_AUTHOR = exports.DENEB_FRAMEWORK_VERSION = exports.DENEB_FRAMEWORK_NAME = exports.FilterSidebar = exports.CartDrawer = exports.CategoryPills = exports.AnnouncementBar = exports.HeroSplit = void 0;
23
23
  __exportStar(require("./EditableText"), exports);
24
24
  __exportStar(require("./EditableImage"), exports);
25
25
  __exportStar(require("./EditableList"), exports);
@@ -146,16 +146,6 @@ var EditableAnnouncementBar_1 = require("./EditableAnnouncementBar");
146
146
  Object.defineProperty(exports, "AnnouncementBar", { enumerable: true, get: function () { return EditableAnnouncementBar_1.EditableAnnouncementBar; } });
147
147
  var EditableCategoryPills_1 = require("./EditableCategoryPills");
148
148
  Object.defineProperty(exports, "CategoryPills", { enumerable: true, get: function () { return EditableCategoryPills_1.EditableCategoryPills; } });
149
- var StickyMobileBar_1 = require("./StickyMobileBar");
150
- Object.defineProperty(exports, "StickyMobileBar", { enumerable: true, get: function () { return StickyMobileBar_1.StickyMobileBar; } });
151
- var TrustBadges_1 = require("./TrustBadges");
152
- Object.defineProperty(exports, "TrustBadges", { enumerable: true, get: function () { return TrustBadges_1.TrustBadges; } });
153
- var ProductQuickView_1 = require("./ProductQuickView");
154
- Object.defineProperty(exports, "ProductQuickView", { enumerable: true, get: function () { return ProductQuickView_1.ProductQuickView; } });
155
- var CookieConsentBanner_1 = require("./CookieConsentBanner");
156
- Object.defineProperty(exports, "CookieConsentBanner", { enumerable: true, get: function () { return CookieConsentBanner_1.CookieConsentBanner; } });
157
- var FloatingContactWidget_1 = require("./contact/FloatingContactWidget");
158
- Object.defineProperty(exports, "FloatingContactWidget", { enumerable: true, get: function () { return FloatingContactWidget_1.FloatingContactWidget; } });
159
149
  var EditableCartDrawer_1 = require("./EditableCartDrawer");
160
150
  Object.defineProperty(exports, "CartDrawer", { enumerable: true, get: function () { return EditableCartDrawer_1.EditableCartDrawer; } });
161
151
  var EditableFilterSidebar_1 = require("./EditableFilterSidebar");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deneb-ui/ui",
3
- "version": "2.0.30",
3
+ "version": "2.0.32",
4
4
  "description": "Visual-first React component library for editable commerce storefronts. Built for Next.js and Fivora.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -49,7 +49,7 @@
49
49
  ],
50
50
  "license": "MIT",
51
51
  "dependencies": {
52
- "@deneb-ui/core": "^2.0.30"
52
+ "@deneb-ui/core": "^2.0.32"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "react": "^18.0.0 || ^19.0.0",